可以有人详细解释一下吗?跨例程的并发读操作似乎是允许的,但尝试从同时读取和写入相同键时可能会产生竞争条件。
在某些情况下,可以减少上述风险吗?例如:
- 函数A生成k并设置m[k]=0。这是A写入map m的唯一时间。已知k不在m中。 - A将k传递给并发运行的函数B - 然后,A读取m[k]。如果m[k]==0,则等待,只有在m[k]!=0时才继续。 - B查找map中的k。如果找到它,则将m[k]设置为某个正整数。如果没有找到,则等待直到k在m中。
这不是代码(显然),但我认为它显示了即使A和B都尝试访问m,也不会有竞争条件的情况的轮廓,或者如果有竞争条件也无关紧要,因为有额外的约束条件。