gpt4 book ai didi

linux - 关于 POSIX 线程上互斥锁的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:20:44 25 4
gpt4 key购买 nike

我在使用以下代码时遇到了一些问题。我似乎找不到错误:

     1  #include <pthread.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <unistd.h>
5
6 struct bla
7 {
8 pthread_mutex_t mut;
9 int x;
10 };
11
12
13 pthread_t tid;
14
15 void *thr_fn1 (struct bla *fp);
16
17 int main()
18 {
19 struct bla *fp;
20 fp = (struct bla *) malloc (sizeof(struct bla));
21 fp->x=3;
22 printf ("Initializing mutex_init\n");
23 pthread_mutex_init (&fp->mut,NULL);
24 pthread_create (&tid,NULL,thr_fn1,fp);
25 sleep (2);
26 printf ("Main thread ended sleep. Incrementing.\n");
27 fp->x++;
28 pthread_join (tid,NULL);
29 printf ("x=%d\n",fp->x);
30 pthread_mutex_destroy(&fp->mut);
31 return 0;
32
33 }
34
35 void *thr_fn1 (struct bla *fp)
36 {
37 printf ("Locking new thread!\n");
38 pthread_mutex_lock (&fp->mut);
39 printf ("Sleeping.\n");
40 sleep (5);
41 pthread_mutex_unlock (&fp->mut);
42 printf ("Thread unlocked.\n");
43 return ((void *) 0);
44 }

为什么值在第 27 行仍然递增?不应该被锁在第二个线程中的互斥量保护吗(第38行)?

谢谢!

最佳答案

互斥量和数据之间没有自动关联。如果您希望互斥锁保护某些特定的数据集,负责围绕对该数据的访问锁定和解锁互斥锁:

sleep (2);
pthread_mutex_lock(&fp->mut);
printf ("Main thread ended sleep. Incrementing.\n");
fp->x++;
pthread_mutex_unlock(&fp->mut);

关于linux - 关于 POSIX 线程上互斥锁的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22182807/

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