<div dir="ltr">Thank you very much :)<br>for keeping track of my created threads i decided to use thread_groups and accumulate them there . i came up with sth like this :<br><br>������� boost::thread_group threadstore;<br> ������� <br>������� threadstore.add_thread(&thread);<br>������� threadstore.add_thread(&thread2);<br>������� BOOST_FOREACH(boost::thread t ,threadstore.threads)<br>������� {<br>����������� cout<<t.get_id();<br> ������� }<br><br><br>well it didnt compiled ! before that , i tried using sth like this which failed nontheless .<br><br>������ vector<boost::thread> threadstore;<br>������� <br>������� threadstore.push_back(thread);<br> ������� threadstore.push_back(thread2);<br>������� BOOST_FOREACH(boost::thread t ,threadstore)<br>������� {<br>����������� cout<<t.get_id();<br>������� }<br><br><br>im clueless of the cause .<br>The threadstore has member called� :threads , which i dont know how to work around it , there is also another member named: m ,<br> �which i have no clue of what it is !nor i know where it came form! or what i can do with it!<br>�i couldnt find any information on these members on the boost::thread documentation either<br>for that example i posted , i moved the mutex inside the loop and then used a sleep() method for couple of microseconds and got it working ( i mean now both threads seem to work as i expected them).<br> but i want to know if we have sth like , lets say a timed_lock kind of lock !, so that a thread would only hold a mutex for a specified time , and when the timeslice presented in the timed_lock() passes , the affordmentioned thread releases the mutex<br> and thus other thread(s) can get that mutex and so there would be no need for a sleep() for a thread to wait till it time-slice finishes up and thus releases the mutex .the current timed_lock tries to obtain the mutex in a specified time , which is not the case .<br> i remember i tried to use yield() for achieving such a possiblity (releasing mutex as soon as possible , i think it kinda worked ,i gave a similare result when i used sleep() )<br>here is the code which i wrote to actually speed up the sum action , which i think didnt give any speed ! would you see where the problem is ? <br> //in the name of GOD<br>//Seyyed Hossein Hasan Pour<br>//Working with Boost::threads<br>#define BOOST_THREAD_USE_LIB<br>#include <iostream><br>#include <boost/date_time/posix_time/posix_time.hpp><br>#include <boost/thread.hpp><br> using namespace std;<br><br>boost::uint64_t� i = 0;<br>boost::uint64_t� sum=0;<br>boost::mutex mutex;<br><br>void IteratorFunc()<br>{<br><br>��� for (i ; i<100000; i++)<br>��� {<br>������� mutex.lock();<br>������� sum+=i;<br> ������ cout<<i<<"\t"<<boost::this_thread::get_id()<<endl;<br>������� mutex.unlock();<br>������� //boost::this_thread::sleep(boost::posix_time::microseconds(200));<br>������ boost::this_thread::yield();<br> ��� }<br><br>}<br><br>int main()<br>{<br>��� boost::posix_time::ptime start = boost::posix_time::microsec_clock::local_time();<br>��� boost::thread thread(IteratorFunc);<br>��� boost::thread thread2(IteratorFunc);<br><br> //��� boost::thread_group threadstore;<br>//<br>//��� threadstore.add_thread(&thread);<br>//��� threadstore.add_thread(&thread2);<br>//<br>//��� BOOST_FOREACH(boost::thread t ,threadstore.threads)<br>//��� {<br>//������� cout<<t.get_id();<br> //��� }<br><br>��� boost::posix_time::ptime end = boost::posix_time::microsec_clock::local_time();<br><br>��� thread.join();<br>��� thread2.join();<br><br>��� cout << "sum =\t" << sum<< "\t"<<end-start<<endl;<br> ��� return 0;<br>}<br><br>i also want to know if we have such a capability where i can specify the priority of a thread or a group of thread against the other threads .<br>let me explain it little more, by that i mean , suppose we have couple of reader threads and one or two writer threads , is there any kind of possiblity that i can grant the writer thread(s) more priority in terms of accessing<br> a resource (by obtaining the mutex more often ? - or the writer thread(s) deny access to readers in some cases ? ) ? or a part of memory ? ( e.g an array of some kind ? )<br>if it is possible , how can i achieve such possibility ?<br> is it possible that i can know if a thread was successful in doing what it was sent to ?<br>can i specify that a thread or a group of thread execute in a specific order ? for example thread one must always execute first and thread two must always follow thread one . do we have such a thing ?<br> do i have any means of talking to threads ? checking the satus of a specific thread ? or group of threads ?<br>can i know by any means , that which threads are blocked and which are not ?<br><br>Thank you so much for your time and please excuse me for such newbish and yet long questions .<br> i really do appreciate your help and time :)<br>Regards<br>Hossein<br><br><br>On Wed, Apr 11, 2012 at 7:38 PM, Vicente J. Botet Escriba <<a href="mailto:vicente.botet@wanadoo.fr">vicente.botet@wanadoo.fr</a>> wrote:<br> <div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> <div bgcolor="#FFFFFF" text="#000000"> Le 11/04/12 13:31, Master a �crit�: <div class="im"><blockquote type="cite"> <div dir="ltr">Hello all .<br> i am a newbie to the boost community . i recently started learning about threads in boost . now there are some questions i would like to ask :<br> </div> </blockquote></div> Welcome.<div class="im"><br> <blockquote type="cite"> <div dir="ltr">1.where can i find examples showing practical uses of boost::thread features? <br> </div> </blockquote></div> The documentation doesn't contains too much examples. You can take a look at the libs/thread/example and tutorial directories :( <div class="im"><blockquote type="cite"> <div dir="ltr"> 2.how can i get all threads ID issued by me in my app? <br> </div> </blockquote></div> No direct way other that storing them in a container. What is your use case?<div class="im"><br> <blockquote type="cite"> <div dir="ltr"> 3.how can i iterate through running threads in my app ? <br> </div> </blockquote></div> No direct way other than storing a thread pointer in a container. What is your use case? <div class="im"><blockquote type="cite"> <div dir="ltr"> <a href="http://4.is" target="_blank">4.is</a> there any kind of means to get all the running threads using boost library? if it does whats the calss? if it doesnt how can i do that?<br> </div> </blockquote></div> See above. I think that you need to specialize the thread class so that it inserts a handle to the created thread on a container at construction time and remove it at destruction time.<div class="im"><br> <blockquote type="cite"> <div dir="ltr"> 5.can i resume a thread after pausing it ? ( how can i pause a thread? )<br> </div> </blockquote></div> Boost.Thread doesn't provide fibers or resumable threads. There is Boost.Fiber for that purpose (not yet in Boost).<div class="im"><br> <blockquote type="cite"> <div dir="ltr">6. how can i share a variable between two or more threads , suppose i have a loop , i want two threads to simultaneously iterate through it , if thread1 counted to 3, thread2 continues it from 4 and so on . ?<br> i already tried� <br> </div> </blockquote></div> You need to protect the access to the loop index variable 'i' with a mutex as you did with sum.<br> <br> HTH,<br> Vicente<div class="im"><br> <blockquote type="cite"> <div dir="ltr">------<br> <blockquote style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">what is wrong with my sample app ? <br> #include <iostream><br> #include <boost/thread.hpp><br> using namespace std;<br> using namespace boost;<br> <br> mutex bmutex;<br> int i=0;<br> int sum=0;<br> void IteratorFunc(int threadid)<br> {<br> ������������ for (� ; i<25 ; i++)<br> ����������� {<br> ������������������� lock_guard<mutex> locker(bmutex);<br> �������������������� cout<<"\t"<<threadid<<"\t"<<this_thread::get_id()<<"\t"<<i<<"\n";<br> ��������������������� sum+=i;<br> ����������� }<br> }<br> <br> int main()<br> {<br> ��� //boost::posix_time::ptime start = boost::posix_time::microsec_clock::local_time();<br> <br> ��� thread thrd(IteratorFunc,1);<br> ��� thread thrd2(IteratorFunc,2);<br> �� <br> ��� cout<<sum;<br> ��� thrd.join();<br> ��� thrd2.join();<br> }<br> </blockquote> </div> <br> </blockquote> <br> </div></div> <br>_______________________________________________<br> Boost-users mailing list<br> <a href="mailto:Boost-users@lists.boost.org">Boost-users@lists.boost.org</a><br> <a href="http://lists.boost.org/mailman/listinfo.cgi/boost-users" target="_blank">http://lists.boost.org/mailman/listinfo.cgi/boost-users</a><br></blockquote></div><br></div>