C语言设定一个 设定一个二元信号量Q,其(1,0)中交替取值
时间: 2024-05-05 11:17:02 浏览: 98
以下是使用C语言实现设定一个二元信号量Q,其(1,0)中交替取值的代码:
```c
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t mutex;
pthread_cond_t cond;
int flag = 0;
void *thread1(void *arg)
{
while(1)
{
pthread_mutex_lock(&mutex);
while(flag != 0)
{
pthread_cond_wait(&cond, &mutex);
}
printf("Thread 1: 1\n");
flag = 1;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
}
void *thread2(void *arg)
{
while(1)
{
pthread_mutex_lock(&mutex);
while(flag != 1)
{
pthread_cond_wait(&cond, &mutex);
}
printf("Thread 2: 0\n");
flag = 0;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
}
int main()
{
pthread_t tid1, tid2;
pthread_mutex_init(&mutex, NULL);
pthread_cond_init(&cond, NULL);
pthread_create(&tid1, NULL, thread1, NULL);
pthread_create(&tid2, NULL, thread2, NULL);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
pthread_mutex_destroy(&mutex);
pthread_cond_destroy(&cond);
return 0;
}
```
在主函数中创建了两个线程,分别是thread1和thread2。线程1用来打印数字1,线程2用来打印数字0。两个线程通过使用pthread_mutex_t类型的互斥锁mutex和pthread_cond_t类型的条件变量cond来实现同步。变量flag用来表示当前应该打印的数字。
线程1首先获取互斥锁mutex,然后如果flag不等于0,就进入等待状态,直到其它线程发出信号通知它可以继续执行。一旦获取到信号,就打印数字1,将flag设置为1,并发出信号通知其它线程可以继续执行。最后释放互斥锁mutex。
线程2的实现类似,只是它等待的条件是flag等于1,打印数字0,将flag设置为0,然后发出信号通知其它线程可以继续执行。
通过这种方式,就可以实现一个二元信号量Q,其(1,0)中交替取值。
阅读全文