小编Sig*_*ggi的帖子

pthreads在C - pthread_exit中

出于某种原因,我认为pthread_exit(NULL)在主函数结束时调用将保证所有正在运行的线程(至少在main函数中创建)将在main退出之前完成运行.然而,当我在不调用两个pthread_join函数(在最后main)的情况下运行下面的代码时,我得到了一个分段错误,这似乎是因为main函数在两个线程完成它们的工作之前已经退出,因此char缓冲区不是可用了.但是,当我pthread_joinmain它的末尾包含这两个函数调用时,它应该运行.为了保证main在所有正在运行的线程完成之前不会退出,是否需要调用pthread_join显式为直接初始化的所有线程main

#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <assert.h>
#include <semaphore.h>
#define NUM_CHAR 1024
#define BUFFER_SIZE 8

typedef struct {
    pthread_mutex_t mutex; 
    sem_t full;
    sem_t empty;
    char* buffer;
} Context;

void *Reader(void* arg) {
    Context* context = (Context*) arg;
    for (int i = 0; i < NUM_CHAR; ++i) {
        sem_wait(&context->full);
        pthread_mutex_lock(&(context->mutex));
        char c = context->buffer[i % …
Run Code Online (Sandbox Code Playgroud)

c pthreads

14
推荐指数
2
解决办法
4万
查看次数

标签 统计

c ×1

pthreads ×1