Als ik het goed begrijp is usage juist de variabele die je moet synchronizen. Die logica moet binnen je semaphores staan. Je hoeft daar zelf niet op te checken, de semaphore empty houdt juist zelf bij of er nog lege slots zijn.
Ik heb toevallig net zelf een shared memeory producer consumer buffer geschreven. Mijn acquire-release ziet er zo uit:
C++:
(ik split die functies omdat ik slots uitgeef en dat gaat via een scoped locking object... ingewikkeld... Verder gebruik ik boost::interprocess semaphores) Je kan nu iets toevoegen op deze manier:
C++:
Ik heb toevallig net zelf een shared memeory producer consumer buffer geschreven. Mijn acquire-release ziet er zo uit:
C++:
1 | T* acquire_write_slot(bool block = true) {
|
(ik split die functies omdat ik slots uitgeef en dat gaat via een scoped locking object... ingewikkeld... Verder gebruik ik boost::interprocess semaphores) Je kan nu iets toevoegen op deze manier:
C++:
1 | T* x = pcb->acquire_read_slot(true);
|