使 class 的函数线程安全
make function thread safe of class
字符串 getter & setter 。如何使线程安全
即使在单线程程序中,这也不会很好地结束。 getString
分发一个指向由 strVar
管理的存储的指针。稍后的 setString
调用可能会导致字符串重新分配其存储空间,从而使该指针悬空。任何挂在该指针上并稍后尝试使用它的客户端都将触发未定义的行为。
线程会使这个问题变得更糟。假设有人在一个线程上调用 getString
。有可能另一个线程调用 setString
并在 getString
return 之后立即使指针无效,并且在其调用者有机会实际使用它之前。在 getString
内加一把锁无助于防止这种情况发生。您需要 return 共享状态的副本,而不是指向相同状态的指针。
是的,读写需要同步。仅仅用锁来保护写入是不够的——两者都必须在锁下发生,否则就会出现数据竞争。
字符串 getter & setter 。如何使线程安全
即使在单线程程序中,这也不会很好地结束。 getString
分发一个指向由 strVar
管理的存储的指针。稍后的 setString
调用可能会导致字符串重新分配其存储空间,从而使该指针悬空。任何挂在该指针上并稍后尝试使用它的客户端都将触发未定义的行为。
线程会使这个问题变得更糟。假设有人在一个线程上调用 getString
。有可能另一个线程调用 setString
并在 getString
return 之后立即使指针无效,并且在其调用者有机会实际使用它之前。在 getString
内加一把锁无助于防止这种情况发生。您需要 return 共享状态的副本,而不是指向相同状态的指针。
是的,读写需要同步。仅仅用锁来保护写入是不够的——两者都必须在锁下发生,否则就会出现数据竞争。