Boost logo

Boost Users :

Subject: Re: [Boost-users] Several novice questions concerning threading
From: Ovanes Markarian (om_boost_at_[hidden])
Date: 2012-04-11 11:36:16


Hello Master,

(sounds a bit weired if you ask beginners questions ;)

On Wed, Apr 11, 2012 at 5:08 PM, Vicente J. Botet Escriba <
vicente.botet_at_[hidden]> wrote:

> Le 11/04/12 13:31, Master a écrit :
>
> Hello all .
> 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 :
>
> Welcome.
>
> 1.where can i find examples showing practical uses of boost::thread
> features?
>
> The documentation doesn't contains too much examples. You can take a look
> at the libs/thread/example and tutorial directories :(
>

I would suggest reading Anthony's book on C++ concurrency. The threads in
C++11 were modeled after Boost.Threads and Anthony gave the Boost.Threads
library a major rewrite. Here is a link to it:
http://www.manning.com/williams/ This book contains lots of examples which
are explained in great detail.

 2.how can i get all threads ID issued by me in my app?
>
> No direct way other that storing them in a container. What is your use
> case?
>

> 3.how can i iterate through running threads in my app ?
>
> No direct way other than storing a thread pointer in a container. What is
> your use case?
>
> 4.is 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?
>
> 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.
>
> 5.can i resume a thread after pausing it ? ( how can i pause a thread? )
>
> Boost.Thread doesn't provide fibers or resumable threads. There is
> Boost.Fiber for that purpose (not yet in Boost).
>

Just some thought on that... He did not directly ask about fibers...
Pausing threads is considered a fragile design and bad practice. What
happens if the thread holding a mutex is paused and the thread which should
resume it, wants a mutex => deadlock... For example, newer .NET Framework
versions depricated pause/resume functionality because of such behavior.

> 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 . ?
> i already tried
>
> You need to protect the access to the loop index variable 'i' with a mutex
> as you did with sum.
>
> HTH,
> Vicente
>
>
Best Regards,
Ovanes

> ------
>
>> what is wrong with my sample app ?
>> #include <iostream>
>> #include <boost/thread.hpp>
>> using namespace std;
>> using namespace boost;
>>
>> mutex bmutex;
>> int i=0;
>> int sum=0;
>> void IteratorFunc(int threadid)
>> {
>> for ( ; i<25 ; i++)
>> {
>> lock_guard<mutex> locker(bmutex);
>>
>> cout<<"\t"<<threadid<<"\t"<<this_thread::get_id()<<"\t"<<i<<"\n";
>> sum+=i;
>> }
>> }
>>
>> int main()
>> {
>> //boost::posix_time::ptime start =
>> boost::posix_time::microsec_clock::local_time();
>>
>> thread thrd(IteratorFunc,1);
>> thread thrd2(IteratorFunc,2);
>>
>> cout<<sum;
>> thrd.join();
>> thrd2.join();
>> }
>>
>



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net