好的,所以我有4個線程創建(我創建了4個線程,每個線程都管理一個基本方向,北,南,東或西):C-嘗試將字符傳遞到pthread_create,發生分段錯誤
if ((rc = pthread_create(&tidn, NULL, threadcode, (void *)'n')) != 0)
fprintf(stderr, "thread create failed (%s)\n", strerror(rc)), exit(1);
if ((rc = pthread_create(&tids, NULL, threadcode, (void *)'s')) != 0)
fprintf(stderr, "thread create failed (%s)\n", strerror(rc)), exit(1);
if ((rc = pthread_create(&tide, NULL, threadcode, (void *)'e')) != 0)
fprintf(stderr, "thread create failed (%s)\n", strerror(rc)), exit(1);
if ((rc = pthread_create(&tidw, NULL, threadcode, (void *)'w')) != 0)
fprintf(stderr, "thread create failed (%s)\n", strerror(rc)), exit(1);
,我有我的threadcode功能
void *threadcode(void* dir)
{
char* direction;
struct cart_t *cart = NULL;
direction = (char*)dir;
printf("casted direction %c\n", *direction);
fprintf(stderr, "thread for direction %c starts\n", *direction);
cart = q_getCart(*direction);
while (cart != NULL) {
fprintf(stderr, "thread for direction %c gets cart %i\n",
*direction, cart->num);
monitor_arrive(cart);
monitor_cross(cart);
monitor_leave(cart);
cart = q_getCart(*direction);
}
fprintf(stderr, "thread for direction %c exits\n", *direction);
return NULL;
}
出於某種原因,在創建線程,而是通過創造,代碼賽格故障中途。我不確定它在哪裏發生,但我很確定它在threadcode函數中的某處,因爲線程將開始創建,但會失敗。
謝謝!我想如果一切都失敗了,我會傳入一個char *,但我希望有一些方法可以簡單地將字符傳遞給線程函數,而不需要創建一個完整的變量。 – mike10010100 2014-10-17 22:45:59
'printf','fprintf'和'perror'都保證在POSIX中是安全的。 – caf 2014-10-18 09:22:17
@caf:謝謝,你是對的。線程安全並不總是需要的 - 例如輸出仍然可以在多次調用之間隨機交錯,因此手動同步可能仍然是必需的 - 但在這個特定的程序中,我們只關心個別調用,那麼按照您所說的那樣就可以。 – 2014-10-18 12:35:33