LibC: Fix shared pthread_barrier init

Initialize internal lock and cond as shared when the barrier is shared
This commit is contained in:
2026-04-05 12:03:29 +03:00
parent 1eebe85071
commit ec4aa8d0b6
2 changed files with 10 additions and 2 deletions

View File

@@ -54,7 +54,6 @@ typedef struct
} pthread_barrierattr_t; } pthread_barrierattr_t;
typedef struct typedef struct
{ {
pthread_barrierattr_t attr;
pthread_mutex_t lock; pthread_mutex_t lock;
pthread_cond_t cond; pthread_cond_t cond;
unsigned target; unsigned target;

View File

@@ -1242,13 +1242,22 @@ int pthread_barrier_init(pthread_barrier_t* __restrict barrier, const pthread_ba
if (attr == nullptr) if (attr == nullptr)
attr = &default_attr; attr = &default_attr;
*barrier = { *barrier = {
.attr = *attr,
.lock = PTHREAD_MUTEX_INITIALIZER, .lock = PTHREAD_MUTEX_INITIALIZER,
.cond = PTHREAD_COND_INITIALIZER, .cond = PTHREAD_COND_INITIALIZER,
.target = count, .target = count,
.waiting = 0, .waiting = 0,
.generation = 0, .generation = 0,
}; };
const pthread_mutexattr_t mattr {
.type = PTHREAD_MUTEX_DEFAULT,
.shared = attr->shared,
};
pthread_mutex_init(&barrier->lock, &mattr);
const pthread_condattr_t cattr {
.clock = CLOCK_REALTIME,
.shared = attr->shared,
};
pthread_cond_init(&barrier->cond, &cattr);
return 0; return 0;
} }