apue练习题
来源:互联网 发布:淘宝为什么比京东便宜 编辑:程序博客网 时间:2024/06/05 02:11
//sleep的线程安全实现//#ifndef _PTHREAD_12_6#define _PTHREAD_12_6#include<pthread.h>#include"apue.h"#include<signal.h>#include<unistd.h>static void sig_alarm(int signo){ /*do nothing*/}unsigned int sleep(unsigned nsecs){ sigset_t newmask,oldmask,mask; sigemptyset(&newmask); int signo; sigaddset(&newmask,SIGALRM); int err,unsleep; err=pthread_sigmask(SIG_BLOCK,&newmask,&oldmask);//首先利用线程屏蔽信号函数将SIGALRM信号加入到信号屏蔽字中,对应到进程级信号处理函数就是sigprocmask if(err!=0) cout<<err<<"pthread_sigmask"<<endl; alarm(nsecs); mask=oldmask; sigdelset(&mask,SIGALRM);//确保新的信号屏蔽字中没有将SIGALRM屏蔽 sigwait(&mask,&signo);//sigwait函数恢复oldmask屏蔽字,对应到进程级信号处理函数就是sigsuspend unsleep=alarm(0); if(signo==SIGALRM) sig_alarm;//这里是否需要创建一个线程来处理信号处理函数? pthread_sigmask(SIG_SETMASK,&oldmask,NULL);//pthread_sigmask是否影响别的线程的屏蔽字 return unsleep;}#endif
这里的关键点是理解进程级信号处理函数和线程级信号处理函数,进程级信号处理函数影响的是进程,线程级信号处理函数影响的是线程!
还有就是在线程中的信号处理函数的处理,apue中提到在线程中可以另外创建一个线程来单独处理信号处理函数,而不是单纯利用信号处理函数,主要是因为在线程中,信号处理函数是全局的,一个线程设置的信号处理函数可以被其他线程修改!本文没有另外创建线程来单独处理,后续会利用其他线程替代在主线程中的信号处理!!!
0 0
- apue练习题
- APUE练习题3.5 - 文件重定向
- 基于dup实现linux的dup2函数(APUE练习题3.2)
- APUE练习题3.2——write your own dup2
- Linux文件I/O----APUE-chapter03练习题答案
- apue
- APUE
- apue
- APUE
- APUE
- 练习题
- 练习题
- 练习题
- 练习题
- 练习题
- 练习题
- 练习题
- 练习题
- 103. Binary Tree Zigzag Level Order Traversal
- (三)树
- 清华EMBA课程系列思考之十七(2) -- 公司治理
- 使用ThreadingMixIn实现多线程套接字服务器--《Python网络编程攻略》
- 深入理解Java虚拟机JVM高级特性与最佳实践阅读总结——第三章垃圾收集器与内存分配策略
- apue练习题
- HTTP 学习笔记
- 492. Construct the Rectangle
- Bootstrap 按钮组与下拉按钮(Button Groups & Button Dropdowns)
- js处理时间差
- 关于TensorFlow中的多图(Multiple Graphs)
- 深入理解 AngularJS 的 Scope
- 关于Android 开发常用软件的快捷键总结
- 广工校赛的水题