Код: Выделить всё
// barrier.cc
#include
#include
class Barrier {
public:
explicit Barrier(int num_threads) : num_threads(num_threads), count(0), waiting(0) {
pthread_mutex_init(&mutex, nullptr);
pthread_cond_init(&cond, nullptr);
}
~Barrier() {
pthread_mutex_destroy(&mutex);
pthread_cond_destroy(&cond);
}
void wait() {
pthread_mutex_lock(&mutex);
++waiting;
if (waiting == num_threads) {
waiting = 0; // Reset waiting count for the next barrier
pthread_cond_broadcast(&cond); // Unblock all threads
} else {
while (waiting < num_threads) {
pthread_cond_wait(&cond, &mutex);
}
}
pthread_mutex_unlock(&mutex);
}
private:
int num_threads;
int count;
int waiting;
pthread_mutex_t mutex;
pthread_cond_t cond;
};
// Example function to be run by threads
void* threadFunction(void* arg) {
Barrier* barrier = static_cast(arg);
for (int i = 0; i < 5; ++i) {
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78679894/trying-to-implement-a-barrier-for-pthreads-in-c-using-pthread-condition-variab[/url]