iT邦幫忙

0

[C++] 不同Thread改值問題?

  • 分享至 

  • xImage

Hi 大家好,

想問一下若同一個Main下建兩個Thread,分別各建立一個object像是這樣:

同一個main
建 thread1, thread2
在thread1 new Object class1
在thread2 new Object class2

想問thread1的object要怎麼觸發修改在thread2的object的其中一個參數??
是要寫一個介面嗎? 還是class2要定期去檢查是否需要更改這件事??
其實這就是不同thread要怎麼交互問題 謝謝

麻煩大家了!

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
EN
iT邦好手 1 級 ‧ 2022-05-17 20:15:21

可以用 Shared memory 去做到你想要的功能。

0
rofellos
iT邦新手 2 級 ‧ 2022-05-24 10:33:01

創造object3,new object3
class1和class2同時擁有 object3
把你要交換的資料丟在object3

創造object3,new object3
但object3是全域變數

同1,但在class2內多開thread3執行檢查object3的資料

thread3 new Object class3
class3擁有class1,class2

0
JamesDoge
iT邦高手 1 級 ‧ 2023-02-14 09:16:47

若不同 Thread 需要交互,可以考慮使用 Mutex 或 Semaphore 這些同步物件。這些同步物件可以幫助控制多個 Thread 的存取,防止資料競爭的問題發生。

在您的案例中,如果 thread1 的物件需要修改 thread2 的物件的其中一個參數,可以考慮讓 thread2 在該參數上加上一個 Mutex,讓其他 Thread 存取時必須先取得 Mutex,然後再進行修改。然後,在 thread1 中,當需要修改 thread2 的參數時,先要取得 thread2 的 Mutex,然後進行修改,修改完成後再釋放 Mutex。

以下是簡單的範例程式碼:

#include <iostream>
#include <thread>
#include <mutex>

class Class2 {
public:
    Class2() : value(0) {}

    void setValue(int newValue) {
        std::lock_guard<std::mutex> guard(mutex);
        value = newValue;
    }

    int getValue() const {
        std::lock_guard<std::mutex> guard(mutex);
        return value;
    }

private:
    int value;
    std::mutex mutex;
};

void threadFunc(Class2& obj) {
    while (true) {
        std::this_thread::sleep_for(std::chrono::seconds(1));
        std::cout << "Thread 2 value: " << obj.getValue() << std::endl;
    }
}

int main() {
    Class2 obj2;
    std::thread thread2(threadFunc, std::ref(obj2));

    obj2.setValue(42);

    thread2.join();
    return 0;
}

我要發表回答

立即登入回答