The "fair mutex" (to Alexander G)
От: rg45 СССР  
Дата: 22.01.20 16:38
Оценка:
Просто в твоем примере между unlock и lock совсем нет никакого интервала ожидания и второй поток просто не успевает "воткнуться". Перенеси "sleep" в другую точку и ты увидишь что все вполне "fair":

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();
}
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 22.01.2020 16:40 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.