# Muti-thread

## [Critical Section](https://github.com/angrave/SystemProgramming/wiki/Synchronization,-Part-1:-Mutex-Locks#solving-critical-sections)
## [Race condition](https://zh.wikipedia.org/wiki/%E7%AB%B6%E7%88%AD%E5%8D%B1%E5%AE%B3)
### Data race
Database
Filesystem
共筆
## Mutex and Condition Variabal
### Mutex
> Jserv: 解鈴還需繫鈴人。
## Semaphore
> Semaphore 的本質就是一個 Counter 。
考慮以下程式碼:
```c=
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>
static sem_t A_B;
static sem_t B_A;
void *printA(void *arg)
{
int i = 0;
for(i = 1;i<11;i++){
sem_wait(&B_A);
printf("第%02d次:A",i);
sem_post(&A_B);
}
return NULL;
}
void *printB(void *arg)
{
int i = 0;
for(i = 1;i<11;i++){
sem_wait(&A_B);
printf("B");
sem_post(&B_A);
}
return NULL;
}
int main(){
pthread_t thread_A;
pthread_t thread_B;
sem_init(&A_B,0,0);
sem_init(&B_C,0,1);
pthread_create(&thread_A,NULL,printA,NULL);
pthread_create(&thread_B,NULL,printB,NULL);
pthread_join(thread_A, NULL);
pthread_join(thread_B, NULL);
sem_destroy(&A_B);
sem_destroy(&B_C);
printf("\n");
return 0;
}
```
## Reference
- [SystemProgramming](https://github.com/angrave/SystemProgramming/wiki)
- [並行和多執行緒程式設計](https://hackmd.io/@sysprog/concurrency/https%3A%2F%2Fhackmd.io%2F%40sysprog%2FS1AMIFt0D?fbclid=IwAR21X-K76f86_xW0814bwYTHjeJg2V67mqy5Zs1PDkoon8m6qQAHEHCMwPQ)
- [Mr.Opengate's Blog](https://mropengate.blogspot.com/search/label/Computer%20Science-Operating%20System)