Why is it spawned each time?
Thread is a "thread of execution". When you launch it in c/c++, it
starts in the beginning of some function and ends when the function
ends. So if you return from the thread function, this particular
thread exits.
thanks , thats great .:) i though the only way to terminate a thread is to use interrupts and an un-handled exception generated by sleep() :)
 by the way it is the source code whith my latest knowledge . it now compiles fine thanks to you guys , kills a thread , and then specifically i can manage each thread i want . but there is a problem , the first thread doesnt print anything on the cosole ! while the others do! i even used mutex , but seems its not the case  . any idea?

//in the name of GOD
//Seyyed Hossein Hasan Pour
//Learning Boost Threading
//How to selectively specify a thread and terminate it

#include <boost/signal.hpp>
#include <iostream>
#include <boost/thread.hpp>
using namespace std;

boost::thread threadarray[3];
boost::mutex mutex;
int t(int x)
{
    if(threadarray[0].get_id() == boost::this_thread::get_id())
    {
        boost::lock_guard<boost::mutex> locker(mutex);
        std::cout<<"thread 1";
    }
    else if(threadarray[1].get_id() == boost::this_thread::get_id())
    {
        return 0;
    }
    else if(threadarray[2].get_id() == boost::this_thread::get_id())
    {
        boost::lock_guard<boost::mutex> locker(mutex);
        std::cout<<"thread 3";
    }
    return 0;
}

int main()
{
    boost::thread t1(t,5), t2(t,6),t3(t,7);
   
    threadarray[0] = t1.move();
    threadarray[1] = t2.move();
    threadarray[2] = t3.move();

    for(int i = 0; i <3;i++)
    {
        threadarray[i].join();
    }
    system("pause");
    return 0;
}