gpt4 book ai didi

multithreading - pthread_init,pthread_lock,pthread_destroy等的调用顺序?

转载 作者:行者123 更新时间:2023-12-03 12:52:44 26 4
gpt4 key购买 nike

通常,正确的顺序是这样的:

pthread_mutex_init(&mutex,NULL);

pthread_mutex_lock(&mutex);

pthread_mutex_unlock(&mutex);

pthread_mutex_destroy(&mutex);

应该首先初始化 mutex,然后可以在各自的线程中调用 pthread_mutex_lockpthread_mutex_unlock以保护关键部分,最后在所有线程完成后调用 pthread_mutex_destroy销毁 mutex。但是,如果顺序混合,会发生什么?

我破坏了函数的顺序以发现错误,但是当顺序以不同的方式弄乱时,一切似乎都是正常的。这是一个例子。
pthread_mutex_t mutex;
static int count = 0;

void* func(void* arg)
{
pthread_mutex_lock(&mutex);
*(int*)arg = *(int*)(arg) + 1;
printf("thread %d\n", *(int*)arg);
pthread_mutex_unlock(&mutex);
}

int main(int argc, char* argv[])
{
int i;
pthread_mutex_init(&mutex, NULL);

pthread_mutex_destroy(&mutex);

for(i = 0; i < 3; i++)
{
pthread_t tid;
pthread_create(&tid, NULL, func, (void*)(&count));
sleep(5);
}

printf("the main thread exit normally.\n");
}

我想问一下顺序对程序是否重要。函数内部是否有某些东西可以确保调用顺序,还是其他呢?如果可以不按顺序使用这些功能,为什么要定义 pthread_mutex_init()pthread_mutex_destroy()

最佳答案

发生的是未定义的行为。该实现可能会或可能不会打印错误,中止程序或启动WW III。或它似乎可以正常工作,但不能保证。

关于multithreading - pthread_init,pthread_lock,pthread_destroy等的调用顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9187118/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com