2
5 쌍의 스레드를 만드는 기능을 구현하고 싶습니다 (한 쌍은 하나의 스레드 쓰기를 의미하고 다른 스레드는 하나의 목록을 공유 함) 이 시나리오). 내가 어떻게 글로벌 영역에서?를 선언?멀티 스레드에서 뮤텍스 잠금을 사용할 수 있습니까? 여러 뮤텍스 잠금을 사용할 수 있습니까
5 쌍의 스레드를 만드는 기능을 구현하고 싶습니다 (한 쌍은 하나의 스레드 쓰기를 의미하고 다른 스레드는 하나의 목록을 공유 함) 이 시나리오). 내가 어떻게 글로벌 영역에서?를 선언?멀티 스레드에서 뮤텍스 잠금을 사용할 수 있습니까? 여러 뮤텍스 잠금을 사용할 수 있습니까
이 데이터 구조에 따라 달라? 오 뮤텍스 잠금을 생성해야합니까. 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
}
};
클래스에 캡슐화 된 뮤텍스 잠금에 대한 예를 하나만 주시겠습니까? – Ericzhang88120
@ Ericzhang88120 충분하니? –
내 두 스레드가 같은 클래스에 없다는 것을 한 번 더. 따라서 그들은 아마도 같은 잠금을 공유 할 필요가 있습니다. – Ericzhang88120