뮤텍스 잠금은 스레드에 호출 된 순서대로 제공됩니까? 그래서 우리는 세 개의 쓰레드 A, B, C와 mutex mtx를 가지고 있다고 가정하자. A가 mtx.lock()을 먼저 호출 한 다음 B와 C를 호출하면 A가 먼저 잠금을 얻고 B와 C를 차례로 수행한다는 것을 의미합니까? 그렇지 않으면 어떻게 보증 할 수 있습니까?뮤텍스 잠금 순서
답변
뮤텍스에서 둘 이상의 스레드가 대기 중이면 대기중인 스레드가 선택됩니다. 선입 선출 (FIFO) 주문을 가정하지 마십시오. 커널 모드 APC와 같은 외부 이벤트로 인해 대기 명령이 변경 될 수 있습니다. - MSDN에서 Mutex 객체에 관한 페이지.
참조 링크 :이 설명하는 간단한 예제를 가지고 Mutex Objects
이 경우 주문을 보증하기 위해 무엇을 사용할 수 있습니까? – Rishi
해당 링크는 플랫폼 별 뮤텍스 API에 대한 것 같습니다. 그러나 asker가 표준 C++ (즉,'std :: mutex') 이외의 것을 사용하고 있다는 표시는 없습니다. –
현재 소유자가 뮤텍스를 잠금 해제 할 때 어떤 스레드가 뮤텍스의 소유권을 받을지 명시하지 않았습니다 (std :: mutex 의미) –
, 내가 가입 대기 완료 후 잠금 장치, 인쇄 뭔가를 취득하고 3 개 작업을 만듭니다. 장벽 (3)을 설정하는 대신 (2)로 설정할 수 있으며 task_a를 실행하고 다른 두 사람이 자물쇠를 뒤집어 뛸 수 있습니다.
나는 boost :: barrier를 사용하여 생성되는 즉시 시작하지 않도록합니다. 결과는 FIFO가 아닌 비 결정적 순서입니다. 다른 플랫폼을 사용하면 다른 결과를 얻을 수 있습니다. A demo of it in action
std::mutex foo;
boost::barrier bar(3);
void task_a() {
bar.wait();
foo.lock();
std::cout << "task a\n";
foo.unlock();
}
void task_b() {
bar.wait();
foo.lock();
std::cout << "task b\n";
foo.unlock();
}
void task_c() {
bar.wait();
foo.lock();
std::cout << "task c\n";
foo.unlock();
}
int main()
{
std::thread th1 (task_a);
std::thread th2 (task_b);
std::thread th3 (task_c);
th1.join();
th2.join();
th3.join();
return 0;
}
- 1. C에서 뮤텍스 잠금 구현
- 2. 뮤텍스 잠금 - 세트는 여기에서
- 3. 뮤텍스 잠금 켜기 쓰기
- 4. 뮤텍스 잠금 스레드
- 5. 많은 뮤텍스 잠금 사용
- 6. 공유 메모리의 뮤텍스 잠금
- 7. 뮤텍스 및 잠금
- 8. 잠금, 모니터, 뮤텍스
- 9. 뮤텍스 잠금 및 잠금 해제 시차
- 10. 세마포어/뮤텍스 잠금/주파수 해제
- 11. 바쁜 대기없이 뮤텍스 잠금 구현
- 12. WinAPI의 시간 초과 뮤텍스 잠금
- 13. RH 리눅스 뮤텍스 잠금 디버깅
- 14. 내가 다음 코드에서 뮤텍스 죽은 잠금을 디버그 뮤텍스 죽은 잠금
- 15. C에서 pthreads에 뮤텍스 잠금/잠금 해제 및 브로드 캐스트 사용하기
- 16. 뮤텍스 잠금 대 스레딩 잠금. 어떤 것을 사용합니까?
- 17. 뮤텍스 잠금 대기 시간 및 워치 독
- 18. 계층 구조 및 판독기 기록기 뮤텍스 잠금
- 19. ARM Cortex-M4 뮤텍스 잠금. DMB 명령어
- 20. 스레드 안전 pthread 뮤텍스 잠금 래퍼
- 21. 분할 오류 - pthread 뮤텍스 잠금 문제
- 22. 프로세스 간 뮤텍스 읽기/쓰기 잠금
- 23. 부스트 : 어떤 스레드에서 뮤텍스 잠금 해제가 가능합니까?
- 24. 잠금, 뮤텍스 및 중요 섹션 간의 차이점
- 25. 동기화를위한 인덱스 종속 잠금/뮤텍스 메커니즘
- 26. 동시에 두 개의 뮤텍스 잠금 유지
- 27. 뮤텍스 및 잠금 구조는 어떻게 구현됩니까?
- 28. 뮤텍스 잠금 (JS) 브라우저의 여러 탭간에 공유됩니까?
- 29. 범위/코드 블록이 포함 된 뮤텍스/잠금
- 30. 뮤텍스 입도
이것은 진짜 질문입니다. [mcve]는 그것을 _good_ 질문으로 바꿀 것입니다. (참고 : 나는 OP가 쓰레드 A와 실제로 쓰레드가 B와 C를 통해 잠금 명령이된다는 사실을 알고있다.) – YSC
"A"는 먼저 잠금을 얻지 만 " B "와"C " – AhmadWabbi
B와 C의 순서를 시행 할 방법이 있습니까? – Rishi