Hi 大家好,
想問一下若同一個Main下建兩個Thread,分別各建立一個object像是這樣:
同一個main
建 thread1, thread2
在thread1 new Object class1
在thread2 new Object class2
想問thread1的object要怎麼觸發修改在thread2的object的其中一個參數??
是要寫一個介面嗎? 還是class2要定期去檢查是否需要更改這件事??
其實這就是不同thread要怎麼交互問題 謝謝
麻煩大家了!
創造object3,new object3
class1和class2同時擁有 object3
把你要交換的資料丟在object3
創造object3,new object3
但object3是全域變數
同1,但在class2內多開thread3執行檢查object3的資料
thread3 new Object class3
class3擁有class1,class2
若不同 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;
}