多线程编程

线程局部变量

[参考1](https://blog.csdn.net/cywosp/article/details/26469435)
[参考2](https://blog.csdn.net/vevenlcf/article/details/77882985)

知识点

1. 概念:竞争条件、死锁条件等
2. 锁、原子操作
3. violate,编译器优化等
4. 无锁队列及常见问题

条件变量

    bool condi = false; // global val
    mtx.lock(); // 1
    while( ! condi ){ // 2
        mtx.unlock(); // 3
        // 4 线程挂起等待,指导条件满足通知 
        // 5 重新获取锁
    }

    // 6 操作临界区
    mtx.unlock() // 7

说明:
1. 1判断条件状态是否满足和访问临界区必须加锁
2. 2~4 条件不满足时,当前线程释放所,进入等待状态,阻塞在4
3. 使用while不使用if的原因:线程可能在不满足条件情况下被唤醒;如,多个线程被唤醒时,其中一个拿到锁改了条件状态。

posted @ 2019-10-12 11:23  holidays  阅读(170)  评论(0编辑  收藏  举报