【发布时间】:2014-01-28 19:16:35
【问题描述】:
我正在尝试使用线程池作为工作线程构建 TCP/IP 侦听器。 基本的东西不起作用,(cond_wait / cond_signal 麻烦)所以我正在缩小问题。但是使用下面的代码,我得到了一个分段错误。
struct worker {
pthread_t tid;
pthread_cond_t worker_cv;
pthread_mutex_t worker_mutex;
int worker_flag;
};
typedef struct worker worker_t;
void initialize_flag( worker_t * w)
{
printf( "Mutex (%d)\n", (int) sizeof w->worker_mutex );
pthread_mutex_init (& w->worker_mutex, NULL);
printf( "Cond (%d)\n", (int) sizeof w->worker_cv );
pthread_cond_init (& w->worker_cv, NULL);
printf( "Flag\n" );
w->worker_flag = 0;
}
SF 出现在“Mutex”的 printf 之后。 我传递给 initialize_flag() 的指针是一个全局指针,并在 main() 中进行了 malloc'ed,以模仿我正在寻找的真实行为。
TIA ((编辑:取自@marcelo的回答): 这是您要求的代码的相关部分
worker_t * worker;
main( )
{
worker = malloc( sizeof( worker_t ) );
if ( worker == NULL ) {
fprintf( stderr, "malloc\n" );
exit(1);
}
fprintf( stdout, "Zero\n" );
memset( & worker, 0, sizeof( worker_t ) );
fprintf( stdout, "Init\n" );
initialize_flag( worker );
【问题讨论】:
-
您可能想显示
malloc()ing 和调用代码? -
"%zu"将是打印size_t的正确格式。
标签: c segmentation-fault pthreads