2013-06-21 69 views
0

我收到的時候我給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(&線程1,& ATTR,upload_data,(無效*)消息);

這是給分段錯誤。

+0

@Ulrich ...謝謝我試圖完全一樣,但didnt't獲得該格式。我必須學習很多東西。 :) – someone

+1

除了已經接受的答案,需要注意的是創建一個線程,可引用特定的互斥體(否則,爲什麼是互斥即使在那裏?),然後,該線程完成(即你的避風港」前t在它上面調用'pthread_join()'),你就銷燬了這個互斥體並退出。即使它不是您造成的問題,它很可能咬你的未來... – twalberg

回答

0

我不知道你會得到什麼樣的錯誤,因爲你永遠不指定正是你的問題是什麼,但我認爲你不能編譯代碼。

man pthread_create

#include <pthread.h> 

    int pthread_create(pthread_t *thread, const pthread_attr_t *attr, 
         void *(*start_routine) (void *), void *arg); 

這表明,在pthread_create不使用pthread_mutex_attrpthread_attr

+0

在這裏我們需要提供的屬性,如果我通過NULL線程被創建的地方。但我想要帶有互斥體的線程,沒有默認屬性,但指定了一個。 – someone

+0

這是我想了解Posix Thread的鏈接。 https://computing.llnl.gov/tutorials/pthreads/#Mutexes – someone

+0

@Krishna我說你ATTR類型錯誤。 'pthread_mutex_attr'!='pthread_attr'。第一attr爲用於確定線程特定設置(堆棧大小等),如果你想通過互斥的功能,你必須將它傳遞'arg'而不是'attr'。 –