【发布时间】:2013-06-21 04:46:12
【问题描述】:
当我在创建线程时将 pthread_mutex_attr 作为参数提供时,我遇到了问题。如果我将属性传递为 NULL 它工作正常,但不需要这个 NULL,
我在这里发布代码,请帮助我纠正我的错误并学习。
pthread_mutex_t thread_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_t thread1;
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
pthread_mutex_init(&thread_mutex, &attr);
ret = pthread_create(&thread1, NULL, my_func, (void *)message);
pthread_mutexattr_destroy(&attr);
pthread_mutex_destroy(&thread_mutex);
pthread_exit(NULL);
如果我像这样通过 attr
ret = pthread_create(&thread1,&attr,upload_data,(void *)message);
这导致分段错误。
【问题讨论】:
-
@Ulrich... 谢谢我试图完全像那样,但没有得到那种格式。我必须学习很多东西。 :)
-
除了已经接受的答案,请注意您正在创建一个线程,它可能引用特定的互斥锁(否则,为什么那个互斥锁甚至在那里?),然后,在线程完成之前(即你还没有在上面调用
pthread_join()),你破坏了那个互斥体并退出。即使它现在没有给你带来问题,但它可能会在未来咬你......
标签: multithreading