Сообщение The "fair mutex" (to Alexander G) от 22.01.2020 16:38
Изменено 22.01.2020 16:40 rg45
The "fair mutex" (to AlexanderG)
Просто в твоем примере между unlock и lock совсет нет никакого интервала ожидания и второй поток просто не успевает "воткнуться". Перенеси "sleep" в другую точку и ты увидишь что все вполне "fair":
http://coliru.stacked-crooked.com/a/fa63ab30045995d3
http://coliru.stacked-crooked.com/a/fa63ab30045995d3
#include <iostream>
#include <thread>
#include <mutex>
std::mutex m;
void thd(const char* name)
{
for (int i = 0 ; i < 4; i++)
{
std::this_thread::sleep_for(std::chrono::milliseconds(500));
m.lock();
std::cout << name << std::endl;
m.unlock();
}
}
int main()
{
std::thread thd1(thd, "thread 1");
std::thread thd2(thd, "thread 2");
thd1.join();
thd2.join();
}
The "fair mutex" (to Alexander G)
Просто в твоем примере между unlock и lock совсем нет никакого интервала ожидания и второй поток просто не успевает "воткнуться". Перенеси "sleep" в другую точку и ты увидишь что все вполне "fair":
http://coliru.stacked-crooked.com/a/fa63ab30045995d3
http://coliru.stacked-crooked.com/a/fa63ab30045995d3
#include <iostream>
#include <thread>
#include <mutex>
std::mutex m;
void thd(const char* name)
{
for (int i = 0 ; i < 4; i++)
{
std::this_thread::sleep_for(std::chrono::milliseconds(500));
m.lock();
std::cout << name << std::endl;
m.unlock();
}
}
int main()
{
std::thread thd1(thd, "thread 1");
std::thread thd2(thd, "thread 2");
thd1.join();
thd2.join();
}