并发编程有两种基本模型:message passing 消息传递 和 shared memory 内存共享
运行在多台机器上的多个进程的并行编程只有一种实用模型: message passing
线程同步的四项原则:按重要性排列
1.首要原则是最低限度地共享对象,减少需要同步的场合。一个对象能不暴露给别的进程就不要暴露。
2.其次是使用高级的并发编程构件,如TaskQueue,Producer-Consumer Queue, CountDownLatch等等
3.使用底层同步原语(primitives)时,只用非递归的互斥器和条件变量,慎用读写锁,不要用信号量。
4.除了使用atomic整数之外,不自己编写lock-free代码,也不要用“内核级”同步原语。
重点讲第3条:底层同步原语的使用
互斥器:使用得最多的同步原语
概念补充:RAII——资源的有效期与持有资源的对象的生命期严格绑定,即由对象的构造函数完成资源的分配(获取),同时由析构函数完成资源的释放。只要对象能正确地析构,就不会出现资源泄漏问题。
互斥器保护了临界区,任何一个时刻最多只能有一个线程在此mutex划出的临界区内活动。单独使用mutex时,主要为了保护共享数据。原则:
-用RAII手法封装mutex的创建,销毁,加锁,解锁四个操作。