Mário Marques
Mário Marques

Reputation: 9

Can I call function within a thread? C

I want to improve the speed of a certain C application and for that I will be using threads. What concerns me is if I can, within a function being executed in a different thread, call another function of that is not being executed in the same thread: Example:

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;
}

In this case, the function does_something() calls the function checks_if_program_can_do_something(), but does_something() is being executed in another thread. I hope I made myself clear. Can I also call the function checks_if_program_can_do_something() in other functions using multiple threads?

Upvotes: 0

Views: 5233

Answers (1)

Edwin Buck
Edwin Buck

Reputation: 70909

Yes, but you should take care that the function does not alter state in such a way that other threads would be impacted negatively.

The terms related to this kind of protection are reentrant, which means the program can safely be paused and continued, and thread-safe which means that two non-pausing calls can be made at the same time.

These features you add to a function require programming approaches that might differ from most people's standard approaches; but, they handle two important scenarios that must be accounted for when writing threaded code:

  • The CPU pauses part of your program (it needs to wait on I/O) or needs the core for a different part of your program.
  • The CPU decides to run two threads of your program at the same time on different cores.

Gide lines for safe programming approaches are plentiful, but I've provided one here for you to get started. Keep in mind that if you use someone else's code in a threaded situation, you also need to verify that their code is written to be reentrant / thread safe.

Upvotes: 3

Related Questions