多线程中的IO

例子

puts函数,io相关的内容,三个线程,第一个线程 往终端输出aaa,第二个线程 往终端输出bbb,第三个线程 ccc; 1puts(aaaaa);最后的结果 cccbbbaaa 或者 其他顺序。不可能为ccbbc这种。支持多线程并发的标准库。

1->puts(aaa)
2->puts(bbb)
3->puts(ccc)
  • 每个puts,先锁住缓冲区,填入内容,解锁缓冲区;三个线程几乎同时的时候,看谁先抢到缓冲区
  • getchar_unlocked版本,单进程单线程 适合,不用加锁解锁。其他的多进程并发安全版的函数

线程与信号

在线程级别遇到信号,如何去响应

  • 每个线程都有自己的mask(全1) pending(全0)位图
  • 以进程为单位,只有pending位图,收到信号,改为1. todo
  • 函数 pthread_sigmask sigwait pthread_kill发信号