摘要:
互斥量: 是个类对象,理解成一把锁,多个线程尝试用lock()来加锁这把锁头时,只有一个线程能锁定成功。(成功的标志是lock()函数返回),如果没锁成功,那么流程卡在lock()这里不断尝试去锁这把锁头(也就是每被调用寄存器一次,都会去申请锁)。 慎用lock()保护共享数据不多也不少,少了达不到 阅读全文
摘要:
void myprint2(const int &mybuf) { cout << "子线程开始,threadid=" << mybuf << endl; cout << "子线程结束,threadid=" << mybuf << endl; } int main() { vector<thread 阅读全文
摘要:
线程参数 引用和指针: 陷进一:不要用引用和指针,因为地址可以被主线程运行完后释放了。 陷阱二:将对象传递给子线程时,可能主线程都运行完了,对象还没构建。 通过源码可知,thread类禁用了拷贝构造函数,但支持对象move 带参架构函数接受的值是右值引用。非带参和move的线程都是非joinable 阅读全文
摘要:
主线程与子线程 默认情况下,主线程执行完后,那么所有子线程也会结束,整个程序执行完毕;除非用detach()分离子线程与主线程。 Thread:一个标准库中的类 join():阻塞主线程;加join() 的地方往往是主线程需要子线程的运行结果。 detach():分离子线程;当子程序很多时,让主线程 阅读全文
摘要:
并发 进程是资源分配的基本单位,切换进程时需要重新读取内存; 比如说:QQ登录时,就会把QQ的相关代码(指令)从磁盘读到内存中,再读入CPU,存入寄存器中,再通过ALU执行指令;如果现在想登录微信,就需要为微信重新分配内存空间,然后把微信的代码拷贝到CPU寄存器中再执行。 而线程是资源调度的基本单位 阅读全文