Hello,
I am using multiple threads for I/O operations. The issue I am having is joining these threads on the main thread. It appears that calling join() on a thread with TLS pointers, it results in a hang.
I have multiple thread specific pointers declared outside of the function and in the beginning of the method I call reset ( new std::string ) ....etc etc. I also am acquiring some resource handlers as Im using a boost::thread_specific_ptr < ifstream > infile
So, when I create the thread in the main thread and join() it I get a hang. The only thing I can think of is that the handlers are not being released so join() waits indefinitely.
I read in the documentation that the pointers should be cleaned up on thread exit - but the thread apparently never exits because then resources are not released? I understand that it may not be "conventional" to use a tls pointer for ifstream but I find it a lot better than locking with mutexes.
Also, I'm not sure if there are limits as to how many TLS pointers you can actually use but I am currently using about 10 for one thread method.
Another thing to note is that when calling detach() on the thread, all of the threads execute properly and I get expected output. However, I need to call join() every x amount of threads due to OS limitations of how many threads can actually be created. I need to read about 5000 files so obviously I can't create 5000 threads as Windows maxes out at 700 I believe. I am reading files off of a RAID setup so I believe this is a situation that can benefit from multiple threads reading files.
Basically, I only want to create 4 threads at a time, then join() the previous 4, ensure that they have all completed successfully and continue to create more.
Any suggestions or comments on this issue?
Thanks