Linux信号量是一种用于控制多个进程或线程对共享资源的访问的同步机制。以下是关于信号量的基础概念、优势、类型、应用场景以及可能遇到的问题和解决方法:
信号量(Semaphore)是一个整型变量,用于控制多个进程或线程对共享资源的访问。它有两种基本操作:
try-finally
结构或类似的机制。以下是一个简单的二进制信号量示例,用于实现互斥锁:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>
sem_t mutex;
void* thread_func(void* arg) {
int id = *(int*)arg;
sem_wait(&mutex); // P操作
printf("Thread %d has entered the critical section.
", id);
sleep(1); // 模拟对共享资源的访问
printf("Thread %d is leaving the critical section.
", id);
sem_post(&mutex); // V操作
return NULL;
}
int main() {
pthread_t threads[5];
int thread_ids[5] = {1, 2, 3, 4, 5};
sem_init(&mutex, 0, 1); // 初始化信号量,初始值为1
for (int i = 0; i < 5; i++) {
pthread_create(&threads[i], NULL, thread_func, &thread_ids[i]);
}
for (int i = 0; i < 5; i++) {
pthread_join(threads[i], NULL);
}
sem_destroy(&mutex); // 销毁信号量
return 0;
}
这个示例中,信号量mutex
用于保护临界区,确保同一时间只有一个线程可以进入临界区。
领取专属 10元无门槛券
手把手带您无忧上云