用到的關鍵代碼
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;
}
/*信號量---營業廳*/