我可以在一个线程中调用函数吗? C

时间:2018-03-17 12:49:25

标签: c multithreading pthreads

我想提高某个C应用程序的速度,为此我将使用线程。让我感到担心的是,如果我能够在另一个线程中执行的函数中调用另一个未在同一线程中执行的函数:示例:

void checks_if_program_can_do_something()
{

}

void does_something()
{
    checks_if_program_can_do_something();
}
int main()
{
    does_something(); //another thread is used to execute this function
    return 1;
}

在这种情况下,函数does_something()调用函数checks_if_program_can_do_something(),但do_something()正在另一个线程中执行。我希望我清楚自己。我还可以使用多个线程在其他函数中调用函数checks_if_program_can_do_something()吗?

1 个答案:

答案 0 :(得分:1)

是的,但是你应该注意这个函数不会改变状态,以免其他线程受到负面影响。

与此类保护相关的条款为reentrant,这意味着该程序可以安全地暂停和继续,thread-safe这意味着可以同时进行两次非暂停通话。

您添加到功能中的这些功能需要编程方法,这些方法可能与大多数人的标准方法不同;但是,它们处理编写线程代码时必须考虑的两个重要场景:

  • CPU暂停程序的一部分(需要等待I / O)或者需要核心用于程序的其他部分。
  • CPU决定在不同的核心上同时运行程序的两个线程。

安全编程方法的指导方针很多,但I've provided one here for you to get started。请记住,如果您在线程情况下使用其他人的代码,您还需要验证他们的代码是否是可重入/线程安全的。