(资料图)
Case 0 :
运行的结果大概率是字母和数字混合在一起被打印出来,并不会先打印完全部数字再打印字母。这是因为线程的执行并没有确定的先后顺序。
Case 1 :
当多个线程涉及到共享数据时,为了防止条件竞争和数据访问冲突,需要用到互斥量(Mutex)。
访问共享数据前,将数据锁住,在访问结束后,再将数据解锁。当一个线程使用特定互斥量锁住共享数据时,其他的线程想要访问锁住的数据,都必须等到之前那个线程对数据进行解锁后,才能进行访问——这就是互斥量的作用。
Case 0的优化:
Case 1的优化:
使用互斥量来保护数据,并不是仅仅在每一个成员函数中都加入一个std::lock_guard对象那么简单,一个指针或引用,也会让这种保护形同虚设。
在上述代码中,函数process_data使用std::lock_guard来创建一个互斥量的锁保护区域,确保在同一时间只有一个线程可以访问Data对象的内容。但是在boom函数中调用process_data函数时,content的引用被传递给了malicious_func函数,从而使得通过unprotected_content指针可以绕过互斥量的保护,直接修改Data对象的内容,如果此时有其他线程在访问和修改Data对象,又将引发数据竞争和未定义的行为。
Warning:切勿将受保护数据的指针或引用传递到互斥锁作用域之外,无论是函数返回值,还是存储在外部可见内存,亦或是以参数的形式传递到其他函数中去。
关键词:

-
环球快报:复苏最快的航线:跨大西洋欧美航线,航空需求强劲,终于发财了!根据机票代理机构(OTA)的市场分析:今年夏季,西欧和美国之间的航班
-
天天热点!荷兰国王就荷兰殖民历史正式道歉据荷兰国家公共广播电视台(NOS)当地时间7月1日报道,荷兰国王威廉-亚
-
沈阳市和平区:逛夜市 拿offer 享工作 乐生活沈阳市首季舒心“夜”市暨2023年“逛夜市、拿offer、享工作、乐生活”
-
楚河汉界由来_楚河汉界的由来1、“楚河汉界”是为纪念楚汉战争而留在棋盘上的,它是指楚汉战争中的
-
95号汽油要重回9元时代了吗 95号汽油或将变革 世界快消息hello大家好,我是大学网网小航来为大家解答以上问题,95号汽油要重回9
-
环球快报:复苏最快的航线:跨大西洋欧美航线,航空需求强劲,终于发财了!
2023-07-03 04:27:16
-
天天热点!荷兰国王就荷兰殖民历史正式道歉
2023-07-03 04:19:33
-
沈阳市和平区:逛夜市 拿offer 享工作 乐生活
2023-07-03 03:56:00
-
楚河汉界由来_楚河汉界的由来
2023-07-03 03:16:21
-
95号汽油要重回9元时代了吗 95号汽油或将变革 世界快消息
2023-07-03 03:13:18