mpmc: Use volatile modifier on buffer differently

This commit is contained in:
2026-06-14 17:11:17 +02:00
parent 524371ced8
commit daef211388
2 changed files with 5 additions and 5 deletions
+4 -4
View File
@@ -35,8 +35,8 @@ int mpmc_init(mpmc_t *ctx, const int n_workers, const int buf_size, void (*consu
return -1; return -1;
} }
memset(ctx->buffer, 0, ctx->size * sizeof(void *)); memset((void *)ctx->buffer, 0, ctx->size * sizeof(void *));
memset(ctx->workers, -1, ctx->n_workers * sizeof(pthread_t)); memset(ctx->workers, -1, ctx->n_workers * sizeof(pthread_t));
for (int i = 0; i < ctx->n_workers; i++) { for (int i = 0; i < ctx->n_workers; i++) {
int ret; int ret;
@@ -128,7 +128,7 @@ static void *mpmc_worker(void *arg) {
sem_post(&ctx->lck_rd); sem_post(&ctx->lck_rd);
// consume object // consume object
ctx->consumer((void *)ctx->buffer[p]); ctx->consumer(ctx->buffer[p]);
logger_set_prefix(""); logger_set_prefix("");
// unlock slot in buffer // unlock slot in buffer
@@ -158,7 +158,7 @@ void mpmc_destroy(mpmc_t *ctx) {
sem_destroy(&ctx->used); sem_destroy(&ctx->used);
sem_destroy(&ctx->lck_rd); sem_destroy(&ctx->lck_rd);
sem_destroy(&ctx->lck_wr); sem_destroy(&ctx->lck_wr);
free(ctx->buffer); free((void *)ctx->buffer);
free(ctx->workers); free(ctx->workers);
// reset errno // reset errno
+1 -1
View File
@@ -10,7 +10,7 @@ typedef struct {
volatile int rd, wr; volatile int rd, wr;
sem_t free, used, lck_rd, lck_wr; sem_t free, used, lck_rd, lck_wr;
int size, max_size; int size, max_size;
volatile void **buffer; void *volatile *buffer;
pthread_t *workers; pthread_t *workers;
void (*consumer)(void *obj); void (*consumer)(void *obj);
const char* name; const char* name;