Multithreading 获取pthread mutex属性时出错

Multithreading 获取pthread mutex属性时出错,multithreading,Multithreading,当我在创建线程时将pthread_mutex_attr作为参数时,我遇到了问题。如果我将属性传递为NULL它工作正常,但不希望此NULL 在这里我张贴代码,请帮助我纠正错误,学习东西 pthread\u mutex\u t thread\u mutex=pthread\u mutex\u初始值设定项; pthread_t thread1; pthread_mutextatr_t attr; pthread_mutexattr_init(&attr); pthread_mutexattr_setp

当我在创建线程时将pthread_mutex_attr作为参数时,我遇到了问题。如果我将属性传递为NULL它工作正常,但不希望此NULL

在这里我张贴代码,请帮助我纠正错误,学习东西

pthread\u mutex\u t thread\u mutex=pthread\u mutex\u初始值设定项;
pthread_t thread1;
pthread_mutextatr_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*)消息);
pthread_mutexattr_destroy(&attr);
pthread_mutex_destroy(&thread_mutex);
pthread_exit(NULL);
如果我像这样通过attr

ret=pthread_create(&thread1,&attr,upload_data,(void*)消息)


这是一个分段错误。

我不确定您会遇到什么样的错误,因为您从未指定您的问题到底是什么,但我假设您无法编译代码

manpthread\u创建

   #include <pthread.h>

   int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                      void *(*start_routine) (void *), void *arg);
#包括
int pthread_create(pthread_t*thread,const pthread_attr_t*attr,
无效*(*开始例行程序)(无效*),无效*参数);

这表明pthread\u create不使用
pthread\u mutex\u attr
而是
pthread\u attr

@Ulrich。。。谢谢,我正想这样做,但没有得到格式。我每件事都得学很多。:)除了已经接受的答案之外,请注意,您正在创建一个线程,该线程可能引用一个特定的互斥体(否则,为什么该互斥体还在那里?),然后,在线程完成之前(即,您还没有对其调用
pthread\u join()
),销毁该互斥体并退出。即使它现在没有给您带来问题,将来也可能会对您造成影响……在我们需要提供属性的地方,如果我传递空线程的话。但是我想要一个没有默认属性的互斥线程,但是指定了一个。这是我试图学习Posix线程的链接@奎师那,就像我说的,你的属性类型是错误的<代码>pthread\u mutex\u attr
!=<代码>pthread_attr
。第一个attr用于确定特定于线程的设置(堆栈大小等)。如果要将互斥体传递给函数,则必须在
arg
中传递互斥体,而不是
attr