N个进程通过屏障实现同步Linux代码
时间: 2024-03-23 17:38:31 浏览: 14
在Linux中,可以使用pthread库中的pthread_barrier_t结构体和相关函数来实现屏障同步。具体代码如下:
```c
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define THREAD_NUM 5
pthread_barrier_t barrier;
void* thread_func(void* arg) {
int tid = *(int*)arg;
printf("Thread %d is ready.\n", tid);
sleep(tid);
printf("Thread %d is waiting!\n", tid);
pthread_barrier_wait(&barrier);
printf("Thread %d is running!\n", tid);
pthread_exit(NULL);
}
int main() {
pthread_t tid[THREAD_NUM];
int id[THREAD_NUM];
int i, ret;
ret = pthread_barrier_init(&barrier, NULL, THREAD_NUM);
if (ret) {
printf("pthread_barrier_init error, ret=%d\n", ret);
return ret;
}
for (i = 0; i < THREAD_NUM; i++) {
id[i] = i;
ret = pthread_create(&tid[i], NULL, thread_func, &id[i]);
if (ret) {
printf("pthread_create error, ret=%d\n", ret);
return ret;
}
}
for (i = 0; i < THREAD_NUM; i++) {
ret = pthread_join(tid[i], NULL);
if (ret) {
printf("pthread_join error, ret=%d\n", ret);
return ret;
}
}
pthread_barrier_destroy(&barrier);
printf("All threads exited.\n");
return 0;
}
```
该程序创建了5个线程,并在每个线程中通过pthread_barrier_wait函数等待其他线程到达屏障点,最终在主线程中等待所有线程结束后输出"All threads exited."。其中,pthread_barrier_init函数用于初始化屏障,pthread_barrier_wait函数用于等待其他线程,pthread_barrier_destroy函数用于销毁屏障。