Я новичок в многопоточном программировании. У меня есть простая программа тестирования:Разница во времени и времени разблокировки Mutex
#include <mutex>
#include <thread>
#include <iostream>
int main(){
std::mutex mtx;
std::thread t1([&](){
while (true){
mtx.lock();
std::cout << 1 << "Hello" << "\n";
mtx.unlock();
}
});
std::thread t2([&](){
while (true){
mtx.lock();
std::cout << 2 << "Hello" << "\n";
mtx.unlock();
}
});
t1.join();
t2.join();
}
Это довольно простая программа, и она печатает «1Hello» и «2Hello» в случайном порядке, который предполагает, что мьютекс разблокируется один, а затем приобретен другой и выполненный в некотором случайном порядке.
Указано ли поведение в стандартном, то есть будет ли реализация гарантировать, что она не будет придерживаться t1? А если нет, то как этого избежать?
Не нужно * предполагать *, что 't1' разблокирует мьютексы. Просто прочитайте код! Кроме того, кажется, вам нужно прочитать современную * упреждающую * многозадачность и то, как она работает. –
Я не думаю, что стандарт гарантирует это, но на практике, да, оба будут выполнены. – MikeMB
Вы можете уточнить ТОЧНО, каков ваш вопрос (может быть, добавить подсказку), потому что я просто не получаю :( вопрос в широком ответе здесь + Я думаю, после того, как вам нужно прочитать краткое руководство по многопоточным \ расам -condition \ dead-lock \ live-lock и т. д. вы сможете ответить на ваши вопросы таким типам (было ли это сделано :)) – LordTitiKaka