gpt4 book ai didi

mutex - 可以在内存中移动 pthread_mutex_t 吗?

转载 作者:行者123 更新时间:2023-12-04 15:01:09 26 4
gpt4 key购买 nike

我想构建一个动态分配的 pthread_mutex 数组,它会随着时间的推移而增长(添加更多的互斥锁)。我的问题是,如果数组被 realloc() 移动,它们是否仍然有效。我担心的是 pthread_mutex_init() 可能会以某种方式设置取决于当时互斥锁地址的内部信息。

更具体地说,这是一个显示问题的玩具片段:

pthread_mutex_t *my_mutexes = (pthread_mutex_t *) malloc (sizeof(pthread_mutex_t));
pthread_mutex_init (my_mutexes, NULL);
my_mutexes = (pthread_mutex_t *) realloc (my_mutexes, 2*sizeof(pthread_mutex_t));
/* does my_mutexes[0] still work at this point? */

我想在所有这些情况下的答案是“如果没有明确允许,就假设不允许”,但我想在这里得到明智的建议。如果结论不是这样做,那么我想知道通常如何创建一个不断增长的互斥锁列表。

最佳答案

移动互斥锁是不安全的。例如,Linux 上的一些互斥体实现使用 futex专门等待互斥锁地址的系统调用。

如果它需要动态增长,我建议使用 pthread_mutex_t 的主数组。该主列表的指针和互斥锁。当您增加数组时,您将只移动指针列表而不是互斥体本身。互斥体可以用普通的 malloc 分配.

关于mutex - 可以在内存中移动 pthread_mutex_t 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14614523/

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