我有三個類,我們稱它們爲A,B和HardwareDriver。每個類都有一個實例。 a和b運行在兩個不同的線程中。他們都通過HardwareDriver的一個實例訪問硬件。喜歡的東西:互斥體作爲使用pthreads的類成員
Class A {
... };
Class B {
... };
Class HardwareDriver {
public:
int accessHardware();
};
A a;
B b;
HardwareDriver hd;
pthread_t aThread;
pthread_t bThread;
main() {
pthread_create(&aThread, NULL, &A::startA, &a);
pthread_create(&bThread, NULL, &B::startB, &b);
while (...) { };
return 0;
}
硬件不能由A和B在同一時間訪問,所以我需要保護的代碼與互斥。我是多線程新手,但直觀地說,在通過調用方法hd.accessHardware()請求硬件訪問之前,我會在A和B的方法中鎖定互斥鎖。
現在我想知道是否有可能在hd.accessHardware()中執行鎖定以實現更多封裝。這仍然是線程安全的嗎?當你做任何閱讀或寫操作
a&b或線程是否使用HardwareDriver的相同對象?如果是,那麼確保只有一個HardwareDriver對象被創建。如果你在兩個線程中都使用單個對象,這將是安全的 – Pravin
如果我確定沒有其他類需要同步對共享資源的訪問,並且如果調用accessHardware,我只會在A/B中執行鎖定/解鎖嚴重地在非多線程的情況下,在這種情況下,互斥可能會增加一些開銷。聽起來難以置信:) –