多线程中的IO
例子
puts函数,io相关的内容,三个线程,第一个线程 往终端输出aaa,第二个线程 往终端输出bbb,第三个线程 ccc; 1→puts(aaaaa);最后的结果 cccbbbaaa 或者 其他顺序。不可能为ccbbc这种。支持多线程并发的标准库。
1->puts(aaa) 2->puts(bbb) 3->puts(ccc)
- 每个puts,先锁住缓冲区,填入内容,解锁缓冲区;三个线程几乎同时的时候,看谁先抢到缓冲区
getchar_unlocked版本,单进程单线程 适合,不用加锁解锁。其他的多进程并发安全版的函数
线程与信号
在线程级别遇到信号,如何去响应
- 每个线程都有自己的mask(全1) pending(全0)位图
- 以进程为单位,只有pending位图,收到信号,改为1. todo
- 函数
pthread_sigmasksigwaitpthread_kill发信号