Determining which processes hold a semaphore


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Determining which processes hold a semaphore
# 1  
Old 01-29-2009
Determining which processes hold a semaphore

I have a situation where I have created a semaphore and set it's value to 10. I am using this semaphore to control access to a shared memory location. I can have 10 processes simultaneously read from the shared memory location, process 11 would get locked out. My question is, is there a way I can find out which processes have currently called semop and have obtained the semaphore, and if so what was the value the decremented the semvalue by? I would like to know this so if a process already has obtained the semaphore I can block them from calling semop again and using a 2nd.
# 2  
Old 01-29-2009
Shouldn't the processes post on the semaphore when they're done? And what's so magical about ten, why can ten processes safely share it but not eleven?

semctl can tell you the last time a semop happened to something, but not who did it, or what. I don't think it 'remembers' who has 'access' beyond the normal scope of a sem either; it either suspends processes or not depending on its current value, and keeps a list or waiters to wake when posted on. Perhaps the sem's other access control features can be used to control what processes can wait on it, changing the process' group ID's and such.

Last edited by Corona688; 01-29-2009 at 12:39 PM..
# 3  
Old 01-29-2009
From what I can determine the last process to interact with a semaphore stores it's pid in the semaphore buffer area.

Don't get hung up on 10. 10 was just a number I pulled out of my ---- When a process goes to read from the shared memory it will decrement the semvalue by 1. When it is done reading it increments it by 1. This allows for shared read access to the memory. When a process wishes to write to the shared memory it will decrement (in this example) the semvalue by 10, thus locking out all processes to ensure that while it is updating the memory another process is not trying to read from it and get bogus data.
# 4  
Old 01-29-2009
So what I want to prevent is a deadlock where a process reads memory decrementing semvalue by 1 then tries to request exclusive access. I would like to be able to determine that this process has already decremented the semvalue by 1 and therefore only needs to decrement by 9 to get exclusive access instead of 10.
# 5  
Old 01-29-2009
Can't the process itself remember when its used a semaphore before? Sems don't have that kind of memory, they're just counters and a queue. I've written and deleted many solutions here, realizing partway through that they all fail when a process can't remember how many times its locked it already.
# 6  
Old 01-29-2009
Yeah, the process itself could keep track, I was trying to come up with a more "elegant" way. To protect from lazy developers. Smilie
# 7  
Old 01-29-2009
Quote:
Originally Posted by tpotter01
Yeah, the process itself could keep track, I was trying to come up with a more "elegant" way. To protect from lazy developers. Smilie
Giving them a library function might work for that.
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Hold buffer in sed

Hi Experts, i have a file like below **** table name is xyz row count for previous day 10 row count for today 20 diff between previous and today 10 scan result PASSED **** table name is abc row count for previous day 90 row count for today 35 diff between previous and today 55... (4 Replies)
Discussion started by: Lakshman_Gupta
4 Replies

2. Shell Programming and Scripting

read is not on hold

In end of https://www.unix.com/shell-programming-scripting/103227-while-read-loop-scope-variables-shell.html mjd_tech gives script which can read some values directly without manually input, but if no value is the right one, my understand is, it will on hold for waiting the next input, but when I... (7 Replies)
Discussion started by: newoz
7 Replies

3. Shell Programming and Scripting

Hold buffer in perl

Hi, Can any one tell me is their any "hold buffer" in perl similar to sed. I have to find a pattern, once that pattern found then need to go backward and find another pattern and print. Example: Below are the contents present in a file ## block IPs URLs URL_IPs Unblock URLs ... (4 Replies)
Discussion started by: Anjan1
4 Replies

4. Programming

Semaphore

In my server code there is a thread per client... The server call accept() and after that start the thread. So there is a thread for client that save in RAM the client's message, that will be send to other clients. Now in RAM I have created a shared memory in which thread read and write(save)... (2 Replies)
Discussion started by: italian_boy
2 Replies

5. Shell Programming and Scripting

Hold previous date

A file named abc.txt being updated with date value by one process. Say , today it s updating the file with value 01-09-2009 Fine. Tomorrow the process will override the file with tomorrow date (02-09-2009) .Insome case the process will overriding the file with empty string. So I... (1 Reply)
Discussion started by: Gopal_Engg
1 Replies

6. Shell Programming and Scripting

Semaphore

Hi, I am looking to use a semaphore for the first time in one of my scripts. I am just wondering if there are any simple examples or tutorials around? I am a beginner so the simpler the better :) Thanks -Jaken (2 Replies)
Discussion started by: Jaken
2 Replies

7. Solaris

Identifying and grouping OS processes and APP processes

Hi Is there an easy way to identify and group currently running processes into OS processes and APP processes. Not all applications are installed as packages. Any free tools or scripts to do this? Many thanks. (2 Replies)
Discussion started by: wilsonee
2 Replies

8. UNIX for Advanced & Expert Users

Monitoring Processes - Killing hung processes

Is there a way to monitor certain processes and if they hang too long to kill them, but certain scripts which are expected to take a long time to let them go? Thank you Richard (4 Replies)
Discussion started by: ukndoit
4 Replies

9. Solaris

Determining processes that have been swapped out

Is there a way to do this in Solaris? For instance, suppose I run the following: $ swap -l swapfile dev swaplo blocks free /dev/md/dsk/d501 85,501 16 16780208 16780208 $ swap -s total: 3377368k bytes allocated + 519416k reserved = 3896784k used, 11011992k available... (1 Reply)
Discussion started by: lyonsd
1 Replies

10. UNIX for Advanced & Expert Users

query reg semaphore / processes on solaris

Our Baan application has a server process bflusher which is activated automaticaly by another server process bmanager . These processes uses shared memory to carry out it's operations . Through a baan application query command (tbase6.1 P d 3 ) , i can find the number of users (user process... (1 Reply)
Discussion started by: Hitesh Shah
1 Replies
Login or Register to Ask a Question