Страницы

Поиск по вопросам

пятница, 31 января 2020 г.

Доступ к ресурсу с приоритетами

#c #многопоточность


День добрый.
Есть некоторый разделяемый ресурс с операциями чтения/записи. Известно что операций
чтения гораздо больше, чем записи.
Как организовать доступ к такому объекту? 
Понятно, что можно просто использовать семафор, и блочить на каждый поток ресурс,
вне зависимости чтение это или запись.
    


Ответы

Ответ 1



Может, вам нужен Readers–writer lock? Множество потоков могут читать Только один поток может писать Функции pthread: pthread_rwlock_init() pthread_rwlock_rdlock() pthread_rwlock_wrlock() pthread_rwlock_unlock() Winapi - SRW Locks

Ответ 2



Если пишите под Unix, то можно использовать блокировку чтения-записи pthread_rwlock. Она работает следующим образом : захватить блокировку на чтение и "мониторить" ресурс без модификации данных смогут одновременно N потоков. Если же какой-либо из потоков захватывает блокировку на запись, то продолжить работу этот поток сможет тогда, когда не захвачено ни одной блокировки на чтение (читателей у ресурса в текущий момент нет). Пока поток эксклюзивно удерживает блокировку на запись, все остальные читатели и писатели ждут. Обычно, потоки-писатели находятся в приоритете, т.е. если какой-то из потоков ждет возможности записи, доступ новых читателей к ресурсу блокируется (чтобы поток-писатель не ожидал бесконечно) и они ждут, пока отработает поток-писатель. В некоторых реализациях эту приоритетность по идее можно менять. Если же Вы пишите под Windows, то, возможно, стоит обратить внимание на shared_mutex.

Комментариев нет:

Отправить комментарий