Linux两个进程交替打印
时间: 2024-04-10 10:08:06 浏览: 68
这里提供一个简单的示例,使用两个线程交替打印数字:
```c
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int count = 0;
void *print_even(void *arg) {
while (count < 10) {
pthread_mutex_lock(&mutex);
while (count % 2 != 0) {
pthread_cond_wait(&cond, &mutex);
}
printf("even: %d\n", count++);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
void *print_odd(void *arg) {
while (count < 10) {
pthread_mutex_lock(&mutex);
while (count % 2 != 1) {
pthread_cond_wait(&cond, &mutex);
}
printf("odd: %d\n", count++);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
int main() {
pthread_t t1, t2;
pthread_create(&t1, NULL, print_even, NULL);
pthread_create(&t2, NULL, print_odd, NULL);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
return 0;
}
```
在这个示例中,使用了一个互斥锁和一个条件变量来确保两个线程交替访问共享变量count。其中,print_even线程负责打印偶数,print_odd线程负责打印奇数。每个线程都在访问共享变量前加锁,如果当前的count不是要打印的数字(偶数或奇数),则线程会等待条件变量的信号,释放锁;如果当前的count是要打印的数字,则打印并发送信号,同时释放锁。这样,两个线程就可以交替打印数字了。
阅读全文