多线程网络编程
scut_yp
积极乐观,热爱生活
展开
-
Linux多线程服务端编程(muduo):什么叫线程安全
线程安全应该满足的条件:(1)多个线程同时访问时,其表现出正确额行为(2)无论操作系统如何调度这些线程,无论这些线程的执行顺序如何交织(3)调用端代码无需额外的同步或其他协调动作。整理: 多个线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他操作,调用这个对象的行为都可以获得正确的结果,那么这...原创 2019-04-17 10:53:18 · 205 阅读 · 0 评论 -
Linux多线程服务端编程(muduo):线程同步的四个原则
按重要性排列:(1)首要原则是尽量最低限度地共享对象,减少需要同步的场合。一个对象能不暴露给别的线程就不要暴露;如果要暴露,优先考虑immutable对象;实在不行才暴露可以修改的对象,并用同步措施来充分保护它。(2)其次是使用高级的并发编程机构,如TaskQueue,Producer_Consumer Queue,CountDownLatch等等(3)最后不得已必须使用底层同步原语时...原创 2019-04-17 11:16:40 · 249 阅读 · 0 评论 -
Linux多线程服务端编程(muduo):互斥锁(mutex)的使用原则
单独使用互斥锁时,可以遵循一些原则:(1)用RAII手法(资源获取时就是初始化,在构造函数中创建对象,在析构函数中销毁对象)封装mutex的创建,销毁,加锁,解锁。(2)只用非递归的mutex(即不可重入的mutex,当一个线程已获得锁时,其他线程阻塞的时候,不允许该线程获得锁两次。)(3)不手工调用lock()和unlock()函数,一切交给栈上的Guard对象的构造函数和析构函数负...原创 2019-04-17 11:32:42 · 456 阅读 · 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 · 333 阅读 · 0 评论