C was not designed for multithreading, so behavior of srand() with multithreading is not defined and depends on the C runtime library.
Many Unix/Linux C runtime libraries use single static state, which is not safe to access from multiple threads, so with these C runtimes you should not use srand() and rand() from multiple threads at all (using might result in race conditions). Other Unix C runtimes may behave differently.
Visual C++ runtime uses per-thread internal state, so it is safe to call srand() for each thread. But as Neil pointed out, you will likely seed all threads with same value - so seed with (time + thread-id) instead.
Of course, for portability, use Random objects rather than rand function, and then you would not depend on hidden state at all. You still need one object per thread, and seeding each object with (time + thread-id) is still a good idea.