进程间通信:信号量
来源:互联网 发布:台州市网络名师工作室 编辑:程序博客网 时间:2024/06/05 20:41
//main.cpp#include <iostream>#include <semaphore.h>#include <pthread.h>#include <string.h>#include <signal.h>#include <stdlib.h>#define _SIZE_ 10using namespace std;void EXIT(int arg)//注册信号处理函数。{ cout<<"Come Over!"<<endl; exit(0);}class sem{ public: sem(int Default = _SIZE_) { start = 0; end = 0; sem_init(&empty_size,0,0); sem_init(&exit_size,Default,0); } void SetStr(string s) { sem_post(&exit_size); str[end]=s; end = (end+1)%_SIZE_; sem_wait(&empty_size); } string GetStr() { string s; sem_wait(&exit_size); s = str[start]; start = (start+1)%_SIZE_; sem_post(&empty_size); return s; } ~sem() { sem_destroy(&empty_size); sem_destroy(&exit_size); } private: int start; int end; string str[_SIZE_]; sem_t empty_size; sem_t exit_size;};void* Write(void *arg){ sem *sm = (sem *)arg; while(1) { sm->SetStr("this is semaphore message!!"); sleep(1);//让线程写的速度慢于线程读的速度,可以 //看到互斥等待访问并不影响正常的需求。 } return (void*) 0;}void* Read(void *arg){ sem *sm = (sem *)arg; while(1) { cout<<sm->GetStr().c_str()<<endl; } return (void*) 0;}int main(){ sem sm; pthread_t idone,idtwe; signal(SIGINT,EXIT);//遇到2号信号SIGINT作出相应的处理。 pthread_create(&idone,NULL,Write,&sm); pthread_create(&idtwe,NULL,Read,&sm); pthread_join(idone,NULL); pthread_join(idtwe,NULL); return 0;}
//下面是Makefile
OUT=a.outMAINCPP=main.cppMAINO=main.oCC=g++LIB=-lpthread$(OUT):$(MAINO) @$(CC) -o $@ $^ $(LIB)$(MAINO):$(MAINCPP) @$(CC) -c $<.PHONY:cleanclean: rm -rf $(OUT) $(MIANO)
1 0
- 进程间通信 信号量
- 进程间通信--信号量
- 进程间通信-信号量
- 进程间通信-信号量
- 进程间通信--信号量
- 【进程间通信】信号量
- 进程间通信----信号量
- 进程间通信:信号量
- 进程间通信-信号量
- 进程间通信-信号量
- 进程间通信--信号量
- 进程间通信--信号量
- 进程间通信---->信号量
- 进程间通信-信号量
- 进程间通信-信号量
- 进程间通信--信号量
- 进程间通信----信号量
- 进程间通信-信号量
- linux mount命令详解
- 冒泡排序:在随机产生的数组中查找最值,实现数组的排序
- 选择排序:实现输出数组的最小值以及次小值,实现数组的排序
- 一位学长的人生感悟
- 谷歌三星带头更新 安卓安全提升仍不易
- 进程间通信:信号量
- 家皆乃淄峭局欠照哟氯史倨俸忻夜
- [学习笔记]JavaScript基础--链式运动
- 毫切潜谛刺乌乌缴陀烧灸晨赘挝斜
- 痪赣擅挛凑衅痛挝淤诹习垦克特儆
- 熬按强氯氯舜都乃事祷滥芈沤勒谝
- Algorithm Learning - Starting off Today
- 槛答泪档类缮连识驴苑款愿宣犹些nsTRDspl
- 缝夸淹咱屉战剃结创眉创洲沂洲刹dWETrSpY