: 나는 한 번에 하나의 스레드 액세스를 유지하기 위해 뮤텍스를 사용하더라도이 스레드가 순서대로 실행되지 않는 이유는 무엇입니까? 나는이 코드를 실행하면
Hi from thread 7
Hi from thread 1
Hi from thread 4
Hi from thread 6
Hi from thread 0
Hi from thread 5
Hi from thread 2
Hi from thread 3
Hi from thread 9
Hi from thread 8
:
#include <iostream>
#include <thread>
#include <mutex>
std::mutex m;
int main()
{
std::vector<std::thread> workers;
for (int i = 0; i < 10; ++i)
{
workers.emplace_back([i]
{
std::lock_guard<std::mutex> lock(m);
std::cout << "Hi from thread " << i << std::endl;
});
}
std::for_each(workers.begin(), workers.end(), [] (std::thread& t)
{ t.join(); });
}
을 나는 output 얻가. 출력이 순서대로 나오지 않는 이유는 무엇입니까?
하나의 스레드 액세스를 위해 –
뮤텍스를 시작하는 아무 동시에 코드의 조각을 실행 중이 방지가없는 멀티 스레드 프로그래밍 어려운 :-)한다. 그런데 왜 특정 주문을 기대합니까? –
"한 번에 하나의 스레드 만 액세스"는 사용자가 정확히 달성 한 것입니다. 그런데 왜 그것이 어떤 특정한 순서로 일어날 것을 기대 했습니까? – AnT