共享变量为什么会错
两条线程各把共享计数器加 30 次,最后却小于 60。根本原因是【0】。
什么叫竞争
「竞争条件」这个词说的是【0】。
锁管什么
给「读、加、写」三步套上一把锁,效果是【0】。
两条线程各加 30 次
(每道题开头都有同一段:六个来源 SOURCES,每项是 (名字, 要等的秒数, 字节数);fetch(name, wait, size) 睡 wait 秒后交回 size——「等」的时候别人能干活。) bump 把「读、睡一毫秒、写」当成
补全:把三步锁起来
(每道题开头都有同一段:六个来源 SOURCES,每项是 (名字, 要等的秒数, 字节数);fetch(name, wait, size) 睡 wait 秒后交回 size——「等」的时候别人能干活。) 补全 bump:用 with loc
补全:各写各的格子
(每道题开头都有同一段:六个来源 SOURCES,每项是 (名字, 要等的秒数, 字节数);fetch(name, wait, size) 睡 wait 秒后交回 size——「等」的时候别人能干活。) 六条线程各写字典里自己名字的那一格(
补全:累加总字节
(每道题开头都有同一段:六个来源 SOURCES,每项是 (名字, 要等的秒数, 字节数);fetch(name, wait, size) 睡 wait 秒后交回 size——「等」的时候别人能干活。) 六条线程各把自己的字节数加到共享的
补全:只读的共享不用锁
(每道题开头都有同一段:六个来源 SOURCES,每项是 (名字, 要等的秒数, 字节数);fetch(name, wait, size) 睡 wait 秒后交回 size——「等」的时候别人能干活。) 六条线程都读同一份配置(只读不改),
线程版为什么快
顺序抓六个来源要 0.34 秒,六条线程一起抓只要 0.10 秒。省下的时间来自【0】。
线程不是免费的
把「等 0.0001 秒」的一万个小任务也各开一条线程,反而比顺序做慢。原因是【0】。