gpt4 book ai didi

c++ - 使用 sem_t + pthread_create 的奇怪问题

转载 作者:行者123 更新时间:2023-11-27 23:19:07 25 4
gpt4 key购买 nike

将参数 sem_t 传递给构造函数 A 时出现奇怪的行为。预期输出为 5555 但我得到了 5055。如有设计问题也请指出。

  1 #include <iostream>
2 #include <pthread.h>
3 #include <semaphore.h>
4 using namespace std;
5
6 class A {
7 public:
8 pthread_t thr_id;
9 int& k;
10
11 A(sem_t& sem, int k) : k(k){}
12 A(int k) : k(k){}
13
14 void start(){
15 cout << k;
16 pthread_create(&thr_id, NULL, foo2, NULL);
17 cout << k;
18 }
19 void join(){
20 pthread_join(thr_id, NULL);
21 }
22 static void* foo2(void* i){}
23 };
24
25 int main() {
26 sem_t sem;
27 A* ac1 = new A(sem, 5);
28 ac1->start();
29 ac1->join();
30 A* ac2 = new A(5);
31 ac2->start();
32 ac2->join();
33 return 0;
34 }

最佳答案

int& k;
A(int k) : k(k){}

您正在初始化成员 k 作为构造函数中局部 k 的引用。构造函数完成后,它成为悬挂引用,使用它是未定义的行为。

关于c++ - 使用 sem_t + pthread_create 的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14604519/

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