Programming C, C++, Java, PHP, Ruby, Turing, VB
Computer Science Canada 
Programming C, C++, Java, PHP, Ruby, Turing, VB  

Username:   Password: 
 RegisterRegister   
 Help with Java Semiphore
Index -> Programming, Java -> Java Help
View previous topic Printable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic
Author Message
lufthansa747




PostPosted: Sun Sep 11, 2011 10:43 pm   Post subject: Help with Java Semiphore

ok what i am trying to do with the semiphore is. i want to init it and for every thread i make i want to increase the count by 1. when the thread is done i want to decrease the count by 1. while all this is happening i want the main thread to wait untill the semphore has reached and count of 0 and then continue with the code. how can i do this.
Sponsor
Sponsor
Sponsor
sponsor
lufthansa747




PostPosted: Mon Sep 12, 2011 7:39 am   Post subject: Re: Help with Java Semiphore

bump
S_Grimm




PostPosted: Mon Sep 12, 2011 8:29 am   Post subject: RE:Help with Java Semiphore

http://www.javaworld.com/javaworld/jw-04-1996/jw-04-threads.html?page=2

try using that code but with a counter instead of the boolean variable.

eg
code:
if (counter > 1)
{
threadOne.suspend();
}
else
{
threadOne.resume();
}


and have your other threads increment the counter when they are called.

edit: you'd have to stick it in a block of code that isn't mouseDown()
Tony




PostPosted: Mon Sep 12, 2011 8:35 am   Post subject: RE:Help with Java Semiphore

A semaphore is typically used to block until a resource becomes available (continue with code when a count is above 0), but I suppose you can inverse the condition.

The only tricky part to the implementation are atomic increment/decrement operations, but then there's java.util.concurrent.atomic
Latest from compsci.ca/blog: Tony's programming blog. DWITE - a programming contest.
lufthansa747




PostPosted: Mon Sep 12, 2011 2:00 pm   Post subject: Re: RE:Help with Java Semiphore

Tony @ Mon Sep 12, 2011 8:35 am wrote:
A semaphore is typically used to block until a resource becomes available (continue with code when a count is above 0), but I suppose you can inverse the condition.

The only tricky part to the implementation are atomic increment/decrement operations, but then there's java.util.concurrent.atomic


well this is why i want to do that. i have one main thread. that thread spawn off 9 other threads which all do there own math operations. when they are done they update the main thread with numbers and decrement a variable in the main thread which keeps track of alive threads. currently i have my main thread stuck in a while loop with a 1 millisecond sleep waiting for the other threads to finish. i was hopping that using a semphore could optimize the code a bit because it would be more efficient then calling thread.sleep?
Tony




PostPosted: Mon Sep 12, 2011 2:06 pm   Post subject: RE:Help with Java Semiphore

With a semaphore, you would still be busy-waiting.
Latest from compsci.ca/blog: Tony's programming blog. DWITE - a programming contest.
lufthansa747




PostPosted: Mon Sep 12, 2011 2:42 pm   Post subject: Re: RE:Help with Java Semiphore

Tony @ Mon Sep 12, 2011 2:06 pm wrote:
With a semaphore, you would still be busy-waiting.


but wouldn't it be faster and more efficient
Tony




PostPosted: Mon Sep 12, 2011 2:59 pm   Post subject: RE:Help with Java Semiphore

Than what? How are you checking that other threads have finished now? How is that different from what you plan on doing?
Latest from compsci.ca/blog: Tony's programming blog. DWITE - a programming contest.
Sponsor
Sponsor
Sponsor
sponsor
lufthansa747




PostPosted: Mon Sep 12, 2011 5:58 pm   Post subject: Re: RE:Help with Java Semiphore

Tony @ Mon Sep 12, 2011 2:59 pm wrote:
Than what? How are you checking that other threads have finished now? How is that different from what you plan on doing?



the code currently looks like this

while(threadCount != 0){
Thread.Sleep(1);
}

//do something her


but i thought that if i could use a semiphore block it would be better because i would not be doing a tight loop. lol idk i just though it would be better.
DemonWasp




PostPosted: Mon Sep 12, 2011 8:47 pm   Post subject: RE:Help with Java Semiphore

In Java, if you want to wait for another thread to complete, use .join() on the thread you want to wait for. See: http://download.oracle.com/javase/6/docs/api/java/lang/Thread.html

Your main then looks like:

Java:

List<Thread> threads = ... // your code here...

// Start all threads...
for ( Thread thread : threads ) {
    thread.start();
}

// Wait until all threads are done...
for ( Thread thread : threads ) {
    thread.join();
}


Join puts the calling thread to sleep until the target thread is done. This is done without a busy-wait.
Display posts from previous:   
   Index -> Programming, Java -> Java Help
View previous topic Tell A FriendPrintable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic

Page 1 of 1  [ 10 Posts ]
Jump to:   


Style:  
Search: