在C:
如果我有3个帖子, 将字符串附加到全局字符串(char *)的2个线程, 和1个从该字符串中读取的线程。
假设2个线程每秒附加大约8 000个字符串,第3个线程也经常读取。 它们是否有可能在完全相同的时间附加并覆盖彼此的数据或同时读取并获得不完整的字符串?
答案 0 :(得分:7)
是的,这会很快被破坏
您应该使用互斥锁或读/写锁定机制来保护对此字符串的访问。
如果您使用的是* nix平台,我不确定您使用的是什么平台,但请查看pthreads库。
我不为windows开发,所以我不能指出任何线程功能(虽然我知道Win32中有很多好的线程API
修改
@OP你考虑过每秒附加8000个字符串(你没有说明每个字符串有多大)的内存问题。如果您从未从全局字符串中删除数据,那么您将很快耗尽内存。你可能想要考虑以某种方式限制这个字符串的大小,并设置某种系统来从你的字符串中删除数据(读者线程将是最好的地方)。如果您已经这样做了,请忽略上述内容。
答案 1 :(得分:2)
他们有可能吗? 将在同一时间准确追加 覆盖彼此的数据或继续阅读 同时并得到一个不完整的 字符串?
处理并发问题时,您必须始终保护数据。你永远不能把这种东西留给机会。即使有0.1%的麻烦, 也会发生。