Multithreading 使类的函数线程安全

Multithreading 使类的函数线程安全,multithreading,com,locking,atl,Multithreading,Com,Locking,Atl,字符串getter和setter。如何使线程安全即使在单线程程序中,这也不会有好的结果。getString发出一个指向由strVar管理的存储的指针。稍后的setString调用可能会导致字符串重新分配其存储,使指针悬空。任何挂起此指针并在以后尝试使用它的客户端都将触发未定义的行为 线程会使这个问题变得更糟。假设有人在一个线程上调用getString。另一个线程可能会在getString返回指针之后,在其调用方有机会实际使用它之前调用setString并使指针无效。在getString中设置锁无

字符串getter和setter。如何使线程安全

即使在单线程程序中,这也不会有好的结果。getString发出一个指向由strVar管理的存储的指针。稍后的setString调用可能会导致字符串重新分配其存储,使指针悬空。任何挂起此指针并在以后尝试使用它的客户端都将触发未定义的行为

线程会使这个问题变得更糟。假设有人在一个线程上调用getString。另一个线程可能会在getString返回指针之后,在其调用方有机会实际使用它之前调用setString并使指针无效。在getString中设置锁无助于防止出现这种情况。您需要返回共享状态的副本,而不是指向该状态的指针


是的,读写需要同步。仅仅用锁来保护写操作是不够的,两者都必须在锁下进行,否则就会出现数据竞争。

对不起,我无法解析这句话。getString不是当前设计的方式。它将指向共享数据的指针交给调用者,调用者别无选择,只能在锁之外不受保护地访问它。