Well, locking the whole thread function you actually prevent the
threads from running in parallel. You could just lock the shared
resource, copy it (if it's inexpensive), and release:
lock_guard<mutex> locker(mutex);
// copy id objects here to some local array
locker.unlock();
// proceed.



>> int main()
>> {
>>
>>     threadarray[0] = boost::thread(t,5);
>>     threadarray[1] = boost::thread(t,6);
>>     threadarray[2] = boost::thread(t,7);

You should lock the above as well, because when you're moving a thread
object to threadarray, the thread function is already being runnning.

i should lock that too? but those threads are somewhere else ! only main thread is doing the assignment! how would locking help main ? would locking pause all these threads ?
and what do you mean by :

// copy id objects here to some local array
 whats your meaning about id objects ? did you mean the thread id ? , whats the local array ? an array declared inside that function ? (would be shared among other threads too right? then whats the point? )
Thank you again for your help sir :)