信号量从本质上说就是一个非负整数计数器,通常被用来控制对公共资源的访问控制。用的时候减1,释放的时候加1
信号量的数据类型为结构sem_t
涉及函数:
sem_init
sem_post
sem_wait()
sem_destroy()
简单的测试用例如下:
1 #include <stdio.h>
2 #include <pthread.h>
3 #include <semaphore.h>
4
5 sem_t sem1;
6 sem_t sem2;
7
8 void *thread_first(void *in)
9 {
10 /* 等待信号量sem1 */
11 sem_wait(&sem1);
12 printf("Thread_first running\n");
13 }
14
15 void *thread_second(void *in)
16 {
17 /* wait for signal :sem2 */
18 sem_wait(&sem2);
19 printf("Thread_second running\n");
20 /* add signal sem1,made thread_first run */
21 sem_post(&sem1);
22 }
23