精华内容
下载资源
问答
  • Linux多线程服务端编程 Linux多线程服务端编程 Linux多线程服务端编程 Linux多线程服务端编程 Linux多线程服务端编程
  • Linux多线程服务端编程
  • linux多线程服务端编程-陈硕
  • 学习陈硕老师的《Linux多线程服务端编程》笔记第1章 线程安全的对象生命期管理编写线程安全的类是不难的,只要用同步原语保护内部状态即可。但是对象的生与死不能由对象自身拥有的mutex(互斥器)来保护。1.1 当析构...

    66b52468c121889b900d4956032f1009.png

    8种机械键盘轴体对比

    本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

    学习陈硕老师的《Linux多线程服务端编程》笔记

    第1章 线程安全的对象生命期管理

    编写线程安全的类是不难的,只要用同步原语保护内部状态即可。但是对象的生与死不能由对象自身拥有的mutex(互斥器)来保护。

    1.1 当析构函数遇到多线程

    当一个对象可能被多个线程同时看到时,那么对象的销毁时机就会变得模糊不清,可能出现多种竞态条件(race condition):在即将析构一个对象时,对象会不会在另一个线程被析构?

    如何保证在执行成员函数期间,对象不会在另一个线程被析构?

    在调用某个对象的成员函数之前,如何得知这个对象还活着?它的析构函数会不会碰巧执行到一半?

    线程安全的class应该满足三个条件:多个线程同时访问时,其表现出正确的行为;

    无论操作系统如何调度这些线程,无论这些线程的执行顺序如何交织;

    调用端代码无需额外的同步或其他协调协作。

    下面看这个简单的计数器类Counter:1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22class {

    public:

    Counter() : value_(0){}

    Counter(const Counter &) = delete;

    Counter & operator=(const Counter &) = delete;

    int64_t value() const;

    int64_t getAndIncrease();

    private:

    int64_t value_;

    mutable std::mutex mutex_;

    };

    int64_t Counter::value () const {

    mutex_.lock();

    std::lock_guard<:mutex> lck(mutex_, std::adopt_lock);

    return value_;

    }

    int64_t Counter::getAndIncrease() {

    mutex_.lock();

    std::lock_guard<:mutex> lck(mutex_, std::adopt_lock);

    int64_t ret = value_++;

    return ret;

    }

    每个Counter对象有自己的mutex_,因此不同对象不构成锁争用(lock contention)。两个线程有可能同时执行第20行,前提是它们访问的不是同一个Counter对象。

    尽管Counter类本身毫无疑问是线程安全的,但如果Counter是动态创建的并通过指针来访问,则race condition仍然存在。

    验证代码:1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24#include

    #include

    #include "Counter.h"

    void display(Counter *pcounter){

    if ( pcounter ) {

    int64_t v = pcounter->getAndIncrease();

    std::cout << v << " ";

    delete pcounter;

    }

    }

    int main(){

    std::thread threads[4];

    Counter *pcounter = new Counter;

    for (int i = 0; i < 4; ++i) {

    threads[i] = std::thread(display, pcounter);

    }

    for (auto &t: threads) {

    t.join();

    }

    return 0;

    }

    1.2 对象的创建很简单

    对象在构造的过程中,唯一的要求是在构造期间不要泄露this指针:不要在构造函数中注册任何回调;

    也不要在构造函数中把this指针传给跨线程的对象;

    即便在构造函数的最后一行也不行。

    构造函数执行期间,对象还未完全初始化,this指针泄露给其他对象(其自身创建的子对象除外),那么别的线程有可能访问半成品对象,造成难以预料的后果。即使在最后一行也不要泄露this指针,因为有可能正在构造的对象是一个基类。

    展开全文
  • Linux多线程服务端编程:使用muduo C++网络库 Linux多线程服务端编程:使用muduo C++网络库 Linux多线程服务端编程:使用muduo C++网络库
  • Linux多线程服务端编程:使用muduo+C网络库.pdf Linux多线程服务端编程:使用muduo+C网络库.pdfLinux多线程服务端编程:使用muduo+C网络库.pdfLinux多线程服务端编程:使用muduo+C网络库.pdfLinux多线程服务端编程:...
  • Linux多线程服务端编程-陈硕.pdf
  • 资源名称:Linux多线程服务端编程:使用muduo C 网络库资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
  • Linux多线程服务端编程:使用muduo C++网络库 本书主要讲述采用现代 C++ 在 x86-64 Linux 上编写多线程 TCP 网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即 one loop per thread。...
  • 资源内容是Linux多线程服务端编程 - 陈硕(高清完整版),带标签
  • Linux多线程服务端编程:使用muduo C++网络库》.(陈硕).[PDF]《Linux多线程服务端编程:使用muduo C++网络库》.(陈硕).[PDF]《Linux多线程服务端编程:使用muduo C++网络库》.(陈硕).[PDF]《Linux多线程服务端编程...
  • Linux多线程服务端编程 使用muduo C++网络库。电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍。
  • Linux多线程服务端编程:使用muduo C++网络库(陈硕 著).pdf
  • Linux多线程服务端编程使用muduo C++网络库_13309199.pdf
  • Linux多线程服务端编程 使用muduo C++网络库, 是陈硕编写的,讲的挺好的,非扫描可复制,有标签
  • 陈硕写的Linux 多线程服务端编程:使用 muduo C++ 网络库
  • Linux多线程服务端编程 使用muduo C++网络库_陈硕
  • Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...
  • Linux 多线程服务端编程 使用muduo C++ 网络库
  • Linux多线程服务端编程:使用muduo+C++网络库 试读样章 153页
  • Linux多线程服务端编程知识点总结 重点讲解多线程网络服务器的一种IO模型,即one loop per thread。以muduo网络库为例,讲解这种模型的编程方法及注意事项。 muduo是一个基于非阻塞IO和事件驱动的现代C++网络库。 第...

    Linux多线程服务端编程知识点总结

    重点讲解多线程网络服务器的一种IO模型,即one loop per thread。以muduo网络库为例,讲解这种模型的编程方法及注意事项。
    muduo是一个基于非阻塞IO和事件驱动的现代C++网络库。

    第一部分 C++多线程系统编程
    线程安全的对象生命周期,编写线程安全的类,用同步原语保护内部状态即可。
    当一个对象被多个线程同时看到时,那么对象的销毁时机就会变得模糊不清,可能出现多种竞态条件。对象构造要做到线程安全,唯一的要求是在构造期间不要泄露this指针。
    神器shared_ptr/weak_ptr shared_ptr是引用计数型智能指针。引用计数是自动化资源管理的常用手段,当引用计数降为0时,对象即被销毁。weak_ptr也是一个引用计数应智能指针,但它不增加对象的引用次数,即弱(weak)引用。shared_ptr控制对象的生命期,weak_ptr不控制对象的生命期。内存泄露(借了东西不归还),用scoped_ptr,对象析构时自动释放内存。

    展开全文
  • ( Linux多线程服务端编程:使用muduo C 网络库》样章.7z )还不错,可以看看
  • Linux多线程服务端编程:使用muduo+C++网络库》.陈硕
  • Linux多线程服务端编程 使用muduo C++网络库 PDF电子书下载 带目录书签 完整版
  • Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,602
精华内容 11,840
关键字:

linux多线程服务端编程

linux 订阅