asynchronous control of threads


 
Thread Tools Search this Thread
Top Forums Programming asynchronous control of threads
# 1  
Old 11-08-2005
asynchronous control of threads

I am attempting to build a library that is transparent to the client code. A shared resource is used by many threads with their own synchronization code, but every once in a while, ALL threads need to be stopped for some background control thread to update this resource before proceeding. I have tried many solutions, all of which have given me code that almost works...
  • Total synchronization -- a mutex controls each and every access to the resource. This is very inefficient because so much time is spent arbitrating which thread gets to access the resource, and most of the time this is overkill -- arbitration isn't needed a lot of the time, most things can safely happen in parallel.
  • Signals -- this one is painfully close to working brilliantly, but every once in a while signals go somewhere they're not supposed to. There seems no way to guard against this, and most advice I see in the literature boils down to "Don't mix signals and threads". And there's worse -- I've had pthread_kill hang on me.
  • mprotect -- a variation on signals, but theoretically more safe since the signal originates in the thread that needs to be controlled... at least delivery to the correct thread is guaranteed. Give threads a custom stack, a signal handler that waits on some sort of queue, and a spare signal stack, then set the stack as PROT_NONE when you want threads to halt. Does not work. Signals can't be caught when the stack can't be written or read, even when there's an extra signal stack available.
  • longjmp -- Give threads custom stacks and have threads save their status occasionally with setjmp and longjmp. When needed, instead of suspending threads, kill them dead, then create new ones to take their place and prerecorded state via longjmp. Does not work. There seem to be inconsistences between the stack of new threads and the stack left by the old thread.
I've got a few ideas left, but none of them are particularly elegant, all involving some sort of regimented system to control access or kernel-level thread calls. I was hoping to do this transparently. Is this impossible under pthreads?
# 2  
Old 11-09-2005
Mutexes are the gold standard for this kind of thing. If you have really excessive contetion, you could create a control or "scheduling" thread. It handles mutex contention issues by queuing requests, setting conditions, and calling pthread_cond_signal() to wake a thread. Unless this is what you meant by "signal".

Do you have a copy of Richard Stevens book? -- 'Advanced Programming in the UNIX Environment'

It covers all of these topics.

If you're using Linux, pthread had some issues before kernel 2.6 release, and pthread_cond_signal was one of them, if I remember correctly. It may still have other issues. I don't know. I don't code in Linux very often.
# 3  
Old 11-09-2005
Yes, if I was willing to give up transparency and just force everything to run synchronously in regimented lock-step I could get this working, but that would eliminate all parallelism, the whole point of this environment. I'm looking for nontraditional solutions, essentially.

So far, linux has been the BEST environment for this... Solaris occasionally has odd problems with signals, and OSX's pthreads and signals implimentation is so blighted the whole thing just churns itself down into a sticky mass the instant I hit 'enter'. I'm slowly, slowly getting closer to an implimentation that works on all three...

Thanks for the book reccomendation, I'll check it out.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Solaris

Looking for driver for SunSAI/P 3.0 (Serial Asynchronous Interface) card X2156A

I'm looking for driver for SunSAI/P 3.0 (Serial Asynchronous Interface) card X2156A for Solaris. It used to be on sun-solve, but I fail to find it on the Oracle site. Any help would be very appreciated! (1 Reply)
Discussion started by: Ira28
1 Replies

2. Programming

Asynchronous communication between master and slave threads

I am writing a process that has a master thread and a set of slave threads. Master thread is supposed to get jobs dynamically and assign to slave thread which is free. Master also get results back from slaves once a job is done. The number of slaves should be adjustable dynamically based on job... (1 Reply)
Discussion started by: tamil.pamaran
1 Replies

3. Solaris

Asynchronous I/O

Hi Guys, I am running Solaris 10 on T4 sparc server. How do I see if the O/S is using asynchronous I/O or DirectIO? Thanks in advance. (1 Reply)
Discussion started by: Phuti
1 Replies

4. AIX

Asynchronous I/O on AIX and DB performance

Hi, I would like to hear your thoughts about this. We are running our Data warehouse on DB2 DPF (partition environment) and I have notice that sometimes we hit the Asynchronous-I/O-Processes peak. DB2 relies heavily on Asynchronous I/O so I would believe this has an negative impact.We are... (10 Replies)
Discussion started by: arizah
10 Replies

5. Shell Programming and Scripting

Asynchronous shell scripts question - newbie

Hi All, I am fairly new to UNIX and very new to this forum too. This is my first post here. Here is my scenario - I have 3 scripts script1, script2 and script3. I want to start script1 and script2 asynchronously. Upon completion of both scripts script1 and script2, i want to fire the last... (4 Replies)
Discussion started by: taskeen21
4 Replies

6. UNIX for Advanced & Expert Users

Threads and Threads Count ?

Hi all, How can I get the list of all Threads and the Total count of threads under a particular process ? Do suggest !! Awaiting for the replies !! Thanks Varun:b: (2 Replies)
Discussion started by: varungupta
2 Replies

7. Shell Programming and Scripting

execute remote script asynchronous

Does anyone know how to execute remote script asynchronously? Here is my command TargetList=$testmaker/config/prod_domain.list for targethost in `cat $TargetList`; do rsh $targethost -l bvuser "$HOME/var/script-root/afp/bin/run_nrtp_cache_flush.sh $appName" done (1 Reply)
Discussion started by: leemjesse
1 Replies

8. UNIX for Dummies Questions & Answers

threads

i am tring to sort lots of data thats in many columns by just one column but, if I use sort +16 inputfile the column fluctuates because some of the rows have spaces etc within the text, so the end result is just a mess as it jumps around the columns depending whether it has spaces or not ....ie... (2 Replies)
Discussion started by: Gerry405
2 Replies

9. UNIX for Advanced & Expert Users

Asynchronous I/O on sockets

Hi there, I wonder if there is a (free) UNIX that support asynchronous I/O on sockets. The Linux 2.6 kernel has supports for aio, but not for socket I/O. Anyone has some UNIX distros with aio for me ? Thx Mad (2 Replies)
Discussion started by: MadCoder
2 Replies

10. UNIX for Dummies Questions & Answers

Asynchronous I/O

Hello Please help... Asynchronous I/O ~ is it a default or needed to be enable in Solaris OS? (Solaris 8) If needed to be enable, can anyone please show me how? Thank you (2 Replies)
Discussion started by: april04
2 Replies
Login or Register to Ask a Question