线程同步
文章平均质量分 54
金色熊族
这个作者很懒,什么都没留下…
展开
-
轻量锁与重量锁的思考
不论是linux还是windows,操作系统都提供轻量和重量两种锁。在windows上,CRITICAL_SECTION(临界区)是轻量的,Mutex是重量的;在linux上,futex是轻量的,而pthread_mutex_t是重量的。根据Jeff Preshing 在他的博客Always Use a Lightweight Mutex上的测试,windows上的临界区比mutex快~25倍。这是因为mutex的调用要进入内核,而临界区不会。当然,临界区的劣势是它不可以在进程之间协调。但是,只要你的程序是原创 2021-11-28 18:48:54 · 261 阅读 · 0 评论 -
利用std::async实现异步功能
c++ 11标准推出了多线程功能。其中我比较喜欢的是把async和future联合起来使用,实现异步功能。首先介绍async的使用办法输入参数第一个参数是启动线程的策略,有3个选项:std::launch::async, std::launch::deferred,以及std::launch::async| std::launch::deferred。std::launch::async选项表明,std::async被调用之后就将启动线程(尽管具体的启动时间点不确定,因为线程调用受操作系统支原创 2021-07-11 14:41:00 · 404 阅读 · 0 评论 -
多线程编程时应警惕release 编译模式
原理visual studio 提供两种模式来编译C++代码:debug和release.release 模式下,编译器会“优化”代码,把它认为可以简化的逻辑简化掉。比如说以下代码:void func(){ int i = 1; int j; j = i; while(i == j){}}编译器看到 i 赋值给 j,而且后来的语句里 i j...原创 2020-02-27 19:16:16 · 1037 阅读 · 0 评论 -
自己对互斥和同步的理解
拿下棋做例子。红棋走棋的时候,黑棋不能走,这是互斥;但是红棋走一步,下一步必须黑棋走,反之亦然,这是同步。原创 2016-11-19 15:32:51 · 644 阅读 · 0 评论