gpt4 book ai didi

embedded - pthread_cancel 在arm 和ppc 上的行为不同?

转载 作者:行者123 更新时间:2023-12-02 22:06:33 26 4
gpt4 key购买 nike

我目前正在开发一个多线程应用程序,该应用程序将部署在arm和ppc架构上。我在 ARM 上使用 pthread_cancel 时遇到一些问题。

arm 上的 pthread_cancel 与 ppc 的行为不同。线程被取消,但线程局部变量的析构函数没有在arm 上调用。我还尝试显式定义通过 pthread_cleanup_push 安装的取消清理处理程序例程。但当线程被取消时,它不会被调用。

该代码在 ppc 上运行良好。当线程被取消时,局部变量的析构函数被调用。当我显式定义一个清理处理程序时,它会在调用 pthread_cancel 时被调用并执行。

我错过了什么吗?也许有一些编译器选项?

  • 编程语言:C++
  • 编译器:arm-linux-g++/powerpc-linux-g++
  • 操作系统:Linux

编辑:

我发现登录此libc bug有类似的问题.

使用 gcc 而不是 g++ 并添加 -fno-exception 编译器选项就可以解决问题。但我真的很想了解这个问题背后的东西。此外,-fno-exception 意味着我将无法在我的应用程序中执行异常处理,不是我现在正在使用它,而是我将来可能会使用它。

谢谢。

最佳答案

在没有应用程序帮助的情况下取消线程是一个坏主意。只是google 。最好通过设置一个由线程定期检查的标志变量来告诉线程自行结束。

实际上取消非常困难,以至于在最新的 C++0x 草案中已将其省略。您可以搜索http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2497.html并且根本找不到任何关于取消的提及。这是建议的线程类的定义(您不会在那里找到取消):

class thread
{
public:
// types:
class id;
typedef implementation-defined native_handle_type; // See [thread.native]

// construct/copy/destroy:
thread();
template <class F> explicit thread(F f);
template <class F, class ...Args> thread(F&& f, Args&&... args);
~thread();
thread(const thread&) = delete;
thread(thread&&);
thread& operator=(const thread&) = delete;
thread& operator=(thread&&);

// members:
void swap(thread&&);
bool joinable() const;
void join();
void detach();
id get_id() const;
native_handle_type native_handle(); // See [thread.native]

// static members:
static unsigned hardware_concurrency();
};

关于embedded - pthread_cancel 在arm 和ppc 上的行为不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/637824/

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