如果我有多个线程试图将相同的值写入内存中的单个位置,是否有可能产生竞争条件?在写入过程中,数据会不知何故被破坏?没有先前的读取或测试条件,只有写...是否有可能存在只写操作的争用条件?
编辑:澄清,我正在GPU上计算点产品。我使用多个线程来计算单个产品(每行/列元素一个线程)并将它们保存到内存中的临时位置。然后我需要总结这些中间产品并保存结果。
我在考虑让所有线程分别执行此总和/存储操作,因为在GPU上分支可能会损害性能。 (你会认为它应该花费相同的时间来处理sum/store,无论它是由单个线程还是所有线程完成的,但是我已经测试过了,性能下降很小。)所有线程都会得到相同的总和,但是当他们每个人都试图将他们的答案写入记忆中的同一位置时,我就担心竞争状况。在我所做的有限测试中,一切看起来都很好,但我仍然很紧张......
为什么您的线程将** **值写入位置? –
这个问题没有一般的答案。有一个C++ 11的答案,有一个Windows线程答案,还有一个POSIX pthreads答案,等等。另外,“只写操作”是什么意思?你的意思是一种以高级语言写入的操作,如“i = 1;”?或者你的意思是汇编语言指令?或者是其他东西?因为这也给出了不同的答案。 –
你是否想要订购?你正试图解决什么样的用例? – Scorpion