Re[3]: совет по memory model
От: sokel Россия  
Дата: 07.05.15 08:00
Оценка:
Здравствуйте, sokel, Вы писали:

S> дополнительное relaxed чтение при блокировке читателем.


Хотя на кой чёрт чтение, можно же с оптимизмом предположить, что читатель первым захватывает блокировку.
Тогда достаточно одного CAS:
    void lock_shared() {
        int state = 0;
        for(;;) {
            if(mtx_.compare_exchange_weak(state, state+1, std::memory_order_acquire))
                break;
            if(state < 0) {
                // мьютекс занят писателем - прерываем поток
                // при возврате опять попытаемся быть первыми
                state = 0;
                std::this_thread::yield();
            }
        }
    }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.