Linux中线程同步信号发送与接收总结
来源:互联网 发布:昆明橙子网络 编辑:程序博客网 时间:2024/05/18 09:23
在Linux中关于线程同步信号发送主要分为4步(默认有一个主线程和一个子线程):
(1)首先包含头文件,再创建一个信号量,并初始化之:
#include <semaphore.h>
sem_t sem;//创建信号量
sem_init(&sem,0,0);//初始化信号量
(2)主线程发送信号:
sem_post(&sem);
(3)子线程接收信号:
sem_wait(&sem);
(4)最后摧毁信号
sem_destroy(&sem);
分析总结:过程创建主要分为这四部,虽然简单,但使用时注意信号发送与接收的位置。
例如:
#include <iostream>
#include <string.h>
#include <pthread.h>
#include <semaphore.h>
using namespace std;
unsigned int flag=0;
char buf[200];
sem_t sem;
//子线程作用是统计字符个数并打印
void *func(void *arg){
//子线程首先有个循环
//循环中阻塞在等待主线程激活的时候,子线程被激活后就去获取buf中的字符长度,然后打印;
//完成后再次被阻塞
while(flag==0){
//if(sem_wait(&sem)==0){
sem_wait(&sem);
cout<<"本次输入了"<<strlen(buf)<<"个字符"<<endl;
memset(&buf,0,sizeof(buf));
}
}
int main(){
int ret=-1;
pthread_t th=-1;
sem_init(&sem,0,0);
ret=pthread_create(&th,NULL,func,NULL);
if(ret!=0){
cout<<"error!"<<endl;
return -1;
}
cout<<"请输入字符:"<<endl;
while(cin>>buf){
//去比较用户输入的是不是end,如果是则退出,如果不是则继续
if(strncmp(buf,"end",3)){
sem_post(&sem);
}
else {
flag=1;
sem_post(&sem);//如果不在break结束前发送子线程一个sem信号,子线程会停留在死循环中,主线程就不能够回收子线程中的资源
break;
}
}
//主线程在收到用户输入的字符串,并且确认不是end后就去发信号激活子线程来计数。
//子线程被阻塞,主线程可以激活,这就是线程的同步问题。
//信号量就可以用来实现这个线程同步
cout<<"等待回收子线程"<<endl;
ret=pthread_join(th,NULL);
if(ret!=0){
cout<<"pthread_join error"<<endl;
return -1;
}
cout<<"回收子线程成功"<<endl;
sem_destroy(&sem);
return 0;
}
- Linux中线程同步信号发送与接收总结
- Linux中线程与信号
- linux c++ 进程间信号的发送与接收
- Qml中信号的发送与接收信号槽函数的使用
- linux线程同步之信号
- Linux信号机制之信号的发送及接收
- SIGPIPE信号--解决Linux socket中接收端退出导致发送端send退出问题
- Linux信号列表与发送信号
- Linux 中线程同步与互斥
- linux高级信号发送和接收(附带消息)
- Linux C 信号、线程同步、线程互斥锁、线程条件变量
- Linux线程浅析[线程的同步和互斥之线程死锁,线程与信号的关系]
- linux 进程间信号通知,线程间同步与通信 Test study Model
- 十五、Linux系统编程-信号(二)信号分类、可靠信号与不可靠信号、信号发送 pause
- 内核线程中获取接收到的信号
- 线程接收和发送
- linux网络编程----发送与接收文件
- Linux网络报文接收与发送概述
- [kernel 启动流程] (第四章)第一阶段之——dtb的验证
- 图片上传、视频上传
- [网页设计]Ajax、Comet与Websocket
- Service xxx does not have a SELinux domain defined
- HashMap面试题
- Linux中线程同步信号发送与接收总结
- 【Tensorflow 目录】tensorflow系列
- Linux系统网络桥接
- sscanf\sprintf\fread\fwrite
- javascript中的原型与继承6--class的继承
- 关联规则分析 二
- RN学习笔记
- camera 流程分析和关键代码解释
- java发送http的get、post请求