用C语言设计一个解释peterson互斥原理的三线程程序,0号线程打印十万个father,再用子线程打印十万个child,互斥实现后,父线程和子线程的输出内容会聚在一起
时间: 2023-05-18 12:04:12 浏览: 90
以下是一个解释peterson互斥原理的三线程程序,实现了父线程和子线程的输出内容互斥:
```c
#include <stdio.h>
#include <pthread.h>
#define N 100000
int turn = 0;
int flag[2] = {0, 0};
void *father(void *arg) {
int i;
for (i = 0; i < N; i++) {
flag[0] = 1;
turn = 1;
while (flag[1] && turn == 1) {}
printf("father\n");
flag[0] = 0;
}
pthread_exit(NULL);
}
void *child(void *arg) {
int i;
for (i = 0; i < N; i++) {
flag[1] = 1;
turn = 0;
while (flag[0] && turn == 0) {}
printf("child\n");
flag[1] = 0;
}
pthread_exit(NULL);
}
int main() {
pthread_t tid1, tid2;
pthread_create(&tid1, NULL, father, NULL);
pthread_create(&tid2, NULL, child, NULL);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
return 0;
}
```
在这个程序中,我们使用了两个标志位flag[0]和flag[1]来表示两个线程的状态,使用turn来表示当前哪个线程可以执行。当一个线程想要进入临界区时,它必须先将自己的标志位设置为1,然后等待另一个线程的标志位为0并且轮到自己执行时才能进入临界区。当一个线程执行完临界区后,它将自己的标志位设置为0,然后轮到另一个线程执行。
这个程序可以保证父线程和子线程的输出内容互斥,即父线程和子线程的输出内容不会交错在一起。
阅读全文