Re-entrant functions and how it looks? [closed] - reentrancy

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 8 years ago.
Improve this question
I don't really understand re-entrant code.
Can somebody show me an algorithm for re-entrant code so I can look at it? An explanation of how it works would be nice too. Thanks.

If you, as a developer of some function, can be sure that your function is not called during its execution time, then you may not to pay attention to make it reentrant.
However if your function can be called from different task, threads, or just by interruption signal, there can be a situation, when the function reenters itself during its execution, if it is not reentrant-compliant , not protected from multiple entrances it may lead to unpredictable behaviour, such as data corruption\overwriting or corruption of chronology of the actions in the function.
Here may be a number of approaches. Sometimes it is enough to write a function, for example, working only with copies of the external variables. However sometimes using of mutexes is inevitable. When mutexes are used, the caller of the function will be waiting for mutex unlocking. You just place mutex locking before the critical section and mutex unlocking after the critical section. Whole function body can be wrapped between lock and unlock couple.

Related

exec family function in C [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 6 years ago.
Improve this question
As we know that exec family function calls eventually calls execve() which is a system call and remaining are library functions. So, typically, whatever implications applies on execve() are true for other exec*() functions as well.
I would like to know if, during execution of execve(), all signals are blocked until it succeed, or if there is a way to pass signal to that pid which corresponds to exec? (I know it does not return on success and further execution of calling function does not happen)
I am not sure I got your question right, so feel free to correct me if I am wrong.
But, basically, yes, system calls can be considered as 'atomic' from the process point of view. So, once the execve() system call is started, only the kernel has the hand on it and it won't release the process until running the new command or failing with an error code or raise the SIGKILL signal (as SIGKILL is the only unblockable signal).
But, once the execve() spawned a new process (and returned from the kernel), it is perfectly interruptible with any signal.

What is the purpose of condition variables in Monitors? [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 7 years ago.
Improve this question
What is the purpose of condition variables in Monitors? Why really do we need the condition variables? It may sound something stupid to ask, but never mind I am really new at this. Thanks in advance
A condition variable is basically a container of threads that are waiting for a certain condition. Monitors provide a mechanism for threads to temporarily give up exclusive access in order to wait for some condition to be met, before regaining exclusive access and resuming their task.Reference link here.
Conceptually a condition variable is a queue of threads, associated with a monitor, on which a thread may wait for some condition to become true.

What is the best method of implementing timer inside a thread? [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 7 years ago.
Improve this question
I need to do some operation at regular intervals in my thread. What is the best method to do this?
Like if, i have a local socket communication between linux deamon and a android application. In this case, if i want to send data periodically to the android app from deamon, how can i proceed?
If you use Linux why not try sleep() or usleep() functions of unistd.h?
sleep(5);
Will pause the thread for five seconds and then resume execution.
sleep(sec)
The sleep() function shall cause the calling thread to be suspended from execution until either the number of realtime seconds specified by the argument seconds has elapsed or a signal is delivered to the calling thread and its action is to invoke a signal-catching function or to terminate the process.
usleep(usec)
usleep() function suspends execution of the calling thread for (at least) usec microseconds.
Emphasis mine.
Taken from here and here.
You should use Simple Signals - C programming and alarm function if you want truely accurate timing. If you don't do this, using sleep() etc will eventually result in your timer shifting due to the overhead of your code, the OS, etc.

Practical Relevance of Signals in C [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 8 years ago.
Improve this question
What is a practical relevance of signals in C programs ?
Where do we need signals. I am getting confused and feeling traped in this topic, Who generates signals ?
Signals are a lightweight way for processes to communicate with each other asynchronously; as such, it shouldn't be a surprise that processes generate signals.
Signals are in C because signals were how you communicated with a process in the original version of UNIX.
They are a fairly simple way of allowing your process to respond to external requests such as "re-read my config file", for example.
The K&R chapter is a good intro, but read the C standard to see the minimum for what is defined. In particular, the only portable thing you can do in a signal handler is either abort the process, or set an atomic flag which your main thread of execution will check in due course. In practice, people do more complicated things in signal handlers such as making system calls.
Signals provide a way of supporting asynchronous interrupts in a C program. That said, the C spec is almost completely void of specified behavior for signals, leaving them essentially entirely up to the implementation, so writing portable code that uses signals is almost impossible. You need to carefully read the documentation for your implementation to see what exactly signals can do.

Is it possible to get parent threadID from child? [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 8 years ago.
Improve this question
I am trying to add instrumentation into my code that will print out something like
'Thread 1 forks Thread 2'
Any suggestions on how I can achieve this?
Terminology correction: one thread may create another thread, not fork, which is usually
used to mention one process forking another.
No, a thread has no way to get another thread's identifier. On Linux, you can check if gettid() == getpid() to find if it's the main thread. Solaris has thr_main() to identify if the caller is main thread or not. FreeBSD has pthread_main_np() for the same purpose.
But there's no way to identify parent-child relationship between any threads. Any thread can create more threads. You'll have to use pass the thread identifiers around when creating threads or use global data structure to maintain this information.

Resources