好的,所以我有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