![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程网络编程
scut_yp
积极乐观,热爱生活
展开
-
Linux多线程服务端编程(muduo):什么叫线程安全
线程安全应该满足的条件: (1)多个线程同时访问时,其表现出正确额行为 (2)无论操作系统如何调度这些线程,无论这些线程的执行顺序如何交织 (3)调用端代码无需额外的同步或其他协调动作。 整理: 多个线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他操作,调用这个对象的行为都可以获得正确的结果,那么这...原创 2019-04-17 10:53:18 · 208 阅读 · 0 评论 -
Linux多线程服务端编程(muduo):线程同步的四个原则
按重要性排列: (1)首要原则是尽量最低限度地共享对象,减少需要同步的场合。一个对象能不暴露给别的线程就不要暴露;如果要暴露,优先考虑immutable对象;实在不行才暴露可以修改的对象,并用同步措施来充分保护它。 (2)其次是使用高级的并发编程机构,如TaskQueue,Producer_Consumer Queue,CountDownLatch等等 (3)最后不得已必须使用底层同步原语时...原创 2019-04-17 11:16:40 · 250 阅读 · 0 评论 -
Linux多线程服务端编程(muduo):互斥锁(mutex)的使用原则
单独使用互斥锁时,可以遵循一些原则: (1)用RAII手法(资源获取时就是初始化,在构造函数中创建对象,在析构函数中销毁对象)封装mutex的创建,销毁,加锁,解锁。 (2)只用非递归的mutex(即不可重入的mutex,当一个线程已获得锁时,其他线程阻塞的时候,不允许该线程获得锁两次。) (3)不手工调用lock()和unlock()函数,一切交给栈上的Guard对象的构造函数和析构函数负...原创 2019-04-17 11:32:42 · 462 阅读 · 0 评论 -
Linux多线程服务端编程(muduo):条件变量的使用原则以及(spurious wakeup)虚假唤醒
条件变量的使用方式: 对于wair端: (1)必须与mutex一起使用,该布尔表达式的读写受此mutex保护。 (2)在mutex已上锁的时候才能调用wait()。 (3)把判断布尔条件和wait()放到while循环中。 // wait端 pthread_mutex_lock(mtx); while(deque.empty()) //(这里是为了防止虚假唤醒) ...原创 2019-04-17 15:04:01 · 337 阅读 · 0 评论