线程的其他补充
线程的其他补充
Condition_variable、wait、notify_one、notify_all
条件变量std::condition、wdit()、notify_one()
上述代码深入思考
notify_all
async、future、packaged_task、promise
std future创建后台任务并返回值
std::packaged_task
std::promise
小结
future其他成员函数、shared_future、atomic
std::future的其他成员函数
std::shared_future
原子操作std::atomic
原子操作概念引出范例
基本的std::atomic用法范例
心得总结
std async深入谈
原子操作std::atomic续谈
深入谈std::async
std::async参数详述
std thread的区别
std::async不确定性问题的解决
windows临界区、其他各种mutex互斥量
windows临界区
多次进入临界区试验
自动析构技术
recursive_mutex递归的独占互斥量
带超时的互斥量std recursive_timed_mutex
补充知识、线程池浅谈、数量谈、总结
补充知识点
虚假唤醒
atomic
浅谈线程池
场景设想
实现方式
线程创建数量谈
C++11多线程总结
多线程 - 线程的其他补充
线程操作补充
自带锁的数据 - 新版list
线程管理
线程id
线程id
- 线程id可以通过
std::this_thread::get_id();来获取 
踩坑问题
引用问题
例程:
#include <iostream>
#include <thread>			// 线程头文件
using namespace std;
class TA
{
public:    
    int &m_i;				// 【新增】引用对象
    TA(int &i):m_i(i) {}	// 【新增】构造函数
    void operator()()		// 线程的初始函数(类成员函数),不能带参数!!!
    { 
        cout << "子线程" << endl;
        cout << "m_i:" << m_i << endl;	// 【新增】每次输出时m_i的值都不一样 
    }
}    
int main()					// main函数,主线程的初始函数
{  
    int myi = 6;			// 【新增】 
    Ta ta(myi);				// 【修改】传入引用对象 
    /* std::thread mythread(Ta()); // 这里用匿名对象也是可以的 */  
    std::thread mythread(ta);	// 函数、类、Lambda都是可调用对象 
    mythread.detach();       
    cout << "主线程" << endl; 
    return 0;
}Q:为什么每次输出时m_i的值都不一样
A:原因:detach后主线程执行完后,m_i的内存被回收销毁,此时m_i的内存的值不可控
对象拷贝问题
Q:使用detach()后,当主线程结束对象被销毁,子线程还能使用这个对象的成员函数吗
A:对象会被复制到线程中生成新对象
 前面的例程从开始到结束发生了:一次构造函数、一次拷贝构造函数、两次析构函数
 (这里拷贝构造函数默认是浅拷贝,对象中有引用对象的要注意重写复制构造函数来深拷贝,否则会发生前面的问题)
Thread源码分析
构造函数是一个右值引用的可变参数模板,接受右值参数
其他暂略
00
链接到当前文件 0
没有文件链接到当前文件