PTHREAD_MUTEX_INITIALIZER 與 expected expression before ‘{’ token
在進行 Posix thread 編程時,出現以下編譯錯誤:
error: expected expression before ‘{’ token
出現錯誤的語句為 products.lock = PTHREAD_MUTEX_INITIALIZER;
查了一下,在 pthread.h 中, PTHREAD_MUTEX_INITIALIZER 定義為:
# define PTHREAD_MUTEX_INITIALIZER \
{ { 0, 0, 0, 0, 0, 0, { 0, 0 } } }
原因應該比較清楚了,結構體的初始化問題。 PTHREAD_MUTEX_INITIALIZER 用在靜態類型的互斥量中,而且應該在互斥量定義的時候就用 PTHREAD_MUTEX_INITIALIZER 進行初始化,否則用 pthread_mutex_init 進行初始化。
error: expected expression before ‘{’ token
出現錯誤的語句為 products.lock = PTHREAD_MUTEX_INITIALIZER;
查了一下,在 pthread.h 中, PTHREAD_MUTEX_INITIALIZER 定義為:
# define PTHREAD_MUTEX_INITIALIZER \
{ { 0, 0, 0, 0, 0, 0, { 0, 0 } } }
原因應該比較清楚了,結構體的初始化問題。 PTHREAD_MUTEX_INITIALIZER 用在靜態類型的互斥量中,而且應該在互斥量定義的時候就用 PTHREAD_MUTEX_INITIALIZER 進行初始化,否則用 pthread_mutex_init 進行初始化。
pthread_mutex_t mutex;
pthread_mutex_init(&mutex,NULL); //NULL為默認的互斥鎖