Linux信号量(Semaphore)是一种用于进程间同步的机制,主要用于控制多个进程对共享资源的访问。信号量本质上是一个计数器,可以用来控制多个进程对共享资源的访问数量。
以下是一个使用POSIX信号量实现进程间同步的简单示例:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>
#define NUM_THREADS 5
sem_t sem;
void* thread_func(void* arg) {
sem_wait(&sem); // 等待信号量
printf("Thread %ld is running\n", (long)arg);
// 模拟工作
sleep(1);
printf("Thread %ld is done\n", (long)arg);
sem_post(&sem); // 释放信号量
pthread_exit(NULL);
}
int main() {
pthread_t threads[NUM_THREADS];
int rc;
long t;
sem_init(&sem, 0, 1); // 初始化信号量,初始值为1
for (t = 0; t < NUM_THREADS; t++) {
rc = pthread_create(&threads[t], NULL, thread_func, (void*)t);
if (rc) {
perror("pthread_create");
exit(-1);
}
}
for (t = 0; t < NUM_THREADS; t++) {
pthread_join(threads[t], NULL);
}
sem_destroy(&sem); // 销毁信号量
pthread_exit(NULL);
}
通过以上内容,您应该对Linux信号量编程同步有了更深入的了解。如果还有其他问题,请随时提问。
领取专属 10元无门槛券
手把手带您无忧上云