我的问题与此线程类似,但是我确定在给定线程中得出的结论是否适用于此。
我的用例:在应用程序中,有一个状态线程每 1 秒发送一次相同的文本信息。文本信息包含应用程序组名称。状态读取器使用此状态来确定应用程序服务器是否打开/关闭。
现在应用程序组名称可以在其生命周期内更改。由于某些用户活动,确保只有应用程序中的单个线程触发此事件。现在这个单线程有我需要更新到我的状态线程的新应用程序组名称。
我目前的实现如下
状态线程 Main() Take ReadLock 读取应用组名 Release the ReadLock
发送状态
Updater Thread Main() 获取写锁 更新组名 释放 WriteLock
但是,由于要发送大量更新,我担心我可能会因重负载而导致性能下降。所以我正在努力执行以下操作,但我不确定这是否可行。
新提议的实施是
- 发送者线程持有 char* ptr、char[1024] primaryData、char[1024] secondaryData。
- 首次启动应用程序时,组名在 primaryData 中更新,并且 ptr 指向 primaryData。
- 每当更新线程有更新事件时,它会检查是否 (ptr == primaryData) 将新应用程序名称复制到辅助数据 ptr = secondaryData else 将新应用程序名称复制到primaryData。ptr = 主数据
- 状态线程将始终使用 ptr 指向的数据来发送状态。状态线程最终将接收更新的 ptr(考虑缓存一致性)并将开始传输新数据。
这里有几点需要考虑。1.即使状态线程不能立即获得新数据也没关系 2.我不希望由于无效的内存访问而导致程序崩溃。
朋友们,你能告诉我上面的逻辑是否能帮助我避免读写锁。