gpt4 book ai didi

对 C 中的线程安全和竞争条件感到困惑

转载 作者:太空宇宙 更新时间:2023-11-04 08:19:05 25 4
gpt4 key购买 nike

书上说我们需要消除全局或静态数据以实现线程安全。我认为线程安全意味着程序中没有竞争条件。但是,在下面的示例中,它将本地名副其实的“Point pt_ptr”从非指针类型更改为指针类型“Point *pt_ptr”,以防止竞争条件。我注意到他使用了“malloc”,这意味着他要在堆中创建一些东西。堆中的东西由所有线程共享......因为它创建了一些共享的东西,所以它防止了数据竞争但它会是线程不安全的吗?

int main(void) {
pthread_t tids[NUM_THREADS];
int i;
Point *pt_ptr;

for (i= 0; i < NUM_THREADS; i++) {
pt_ptr= malloc(sizeof(*pt_ptr));
pt_ptr->x= i;
pt_ptr->y= 3 * i + 2;
pthread_create(&tids[i], NULL, print_point, pt_ptr);
}

最佳答案

只有在没有某种线程安全机制(例如互斥量或信号量)的情况下,多个线程试图访问同一内存空间(例如变量)时,才会是线程不安全的。它们用于提供一种阻塞机制,这样一个线程将坐下来“等待”,直到当前拥有的线程通过,此时第二个线程将能够访问/修改变量。

将它们想象成 DMV 的号码,您必须等到您的号码被调用后才能获得服务。

关于对 C 中的线程安全和竞争条件感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34113253/

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