2013-07-21 3 views

답변

1

을 내가 다섯 뮤텍스 잠금을 생성해야합니까?

이 데이터 구조에 따라 달라? 오 뮤텍스 잠금을 생성해야합니까. 5 개의 다른 데이터 객체가 5 개의 연관된 스레드 쌍에서 안전하게 액세스하려면 모든 스레드가 액세스하는 경우 5 개가 필요합니다. 오직 하나의 데이터 객체 만 필요합니다.

신고 방법은 무엇인가요? 글로벌 영역에서?

데이터 개체, 뮤텍스 및 (쓰기) 스레드 함수를 클래스에 캡슐화하십시오. 나는 당신이 다른 읽기 스레드를 필요로하지 않을 것이라고 말하고 싶습니다. 이것은 보통 실행되는 호출 스레드이거나이 클래스의 인스턴스에 대한 액세스 권한을 가진 스레드입니다.

class MyAsynchDataProvider 
{ 
public: 

    void run() 
    { 
     writeThread = std::thread(writeDataFunc,this); 
    } 

    MyDataStruct getSafeDataCopy() 
    { 
     std::lock_guard lock(dataGuard); 
     return data; 
    } 

private: 
    std::mutex dataGuard; 
    MyDataStruct data; 

    std::thread writeThread; 

    static void writeThreadFunc(MyDataWorker* thisPtr) 
    { 
     // ... 
     std::lock_guard lock(thisPtr->dataGuard); 
     // Write to thisPtr->data member 
    } 
}; 
+0

클래스에 캡슐화 된 뮤텍스 잠금에 대한 예를 하나만 주시겠습니까? – Ericzhang88120

+0

@ Ericzhang88120 충분하니? –

+0

내 두 스레드가 같은 클래스에 없다는 것을 한 번 더. 따라서 그들은 아마도 같은 잠금을 공유 할 필요가 있습니다. – Ericzhang88120

관련 문제