字符串获取器和设置器。如何使线程安全
答案 0 :(得分:1)
即使在单线程程序中,这也不会很好地结束。 getString
发出一个指向strVar
管理的存储的指针。稍后的setString
调用可能会导致字符串重新分配其存储空间,从而使该指针悬空。任何挂在该指针上并尝试在以后使用它的客户端都将触发未定义的行为。
线程会使此问题更严重。假设有人在一个线程上呼叫getString
。有可能另一个线程调用setString
之后getString
返回它之前,并且在其调用者有机会实际使用它之前使指针无效。将锁放在getString
内无济于事。您需要返回共享状态的副本,而不是指向相同状态的指针。
是的,读取和写入需要同步。仅用锁保护写操作是不够的-两者都必须在锁下进行,否则会发生数据争用。