用到的关键代码
sem_t sem;//信号量
int sem_init(sem_t *sem,int pshared,unsigned,int value);//初始化由sem指向的信号量,设置它的共享选项,并给它一个初始的整数值。pshared控制信号量的类型,如果其值为0,就表示这个信号量是当前进程的局部信号量,否则信号量就可以在多个进程之间共享。value为sem的初始值。
int sem_wait(sem_t *sem);//信号量减一
int sem_post(sem_t *sem);//信号量加一
int sem_destroy(sem_t *sem);//对信号量进行清理
例子--营业厅
#include "pch.h"
#include<stdio.h>
#include <pthread.h>
#include <windows.h>
#include <iostream>
#include <semaphore.h>
#pragma comment(lib, "pthreadVC2.lib")
#define CUSTOMER_NUM 10
using namespace std;
/*信号量---营业厅*/
sem_t sem;
void *get_service(void *thread_id)
{
int custor_id = *((int *)thread_id);
if (sem_wait(&sem) == 0)
{
Sleep(1000);
printf("customer %d receive service ...\n", custor_id);
sem_post(&sem);
}
return 0;
}
int main(int argc, char *argv[])
{
sem_init(&sem, 0, 2);
pthread_t cunstomer[CUSTOMER_NUM];
int i, iRet;
for (i = 0; i < CUSTOMER_NUM; i++)
{
int customer_id = i;
iRet = pthread_create(&cunstomer[i], NULL, get_service, &customer_id);
if (iRet)
{
printf("pthread_create is error.");
return iRet;
}
else
printf("Customer %d arrived.\n", i);
Sleep(300);
}
int j;
for (j = 0; j < CUSTOMER_NUM; j++)
{
pthread_join(cunstomer[j], NULL);
}
sem_destroy(&sem);
return 0;
}
/*信号量---营业厅*/