------------------------------------------------------------------------------------------------------- Barrier -------------------------------------------------------------------------------------------------------
| 108 | // Barrier |
| 109 | //------------------------------------------------------------------------------------------------------- |
| 110 | void SC::Barrier::wait() |
| 111 | { |
| 112 | mutex.lock(); |
| 113 | const uint32_t gen = generation; |
| 114 | waitCount++; |
| 115 | |
| 116 | if (waitCount == threadCount) |
| 117 | { |
| 118 | waitCount = 0; |
| 119 | generation++; |
| 120 | condition.broadcast(); |
| 121 | } |
| 122 | else |
| 123 | { |
| 124 | while (gen == generation) |
| 125 | { |
| 126 | condition.wait(mutex); |
| 127 | } |
| 128 | } |
| 129 | mutex.unlock(); |
| 130 | } |
| 131 | |
| 132 | //------------------------------------------------------------------------------------------------------- |
| 133 | // Semaphore |