信號量---例子營業廳

用到的關鍵代碼

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;
}

/*信號量---營業廳*/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章