So I'm writing a basic web server for class, and I'm trying to get the multithreading to work. Each thread would run a function in my HTTPserver class, which services one connection. I want to start off by running 5 threads, and then whenever someone connects, start a new thread, until I hit a max_threads ceiling.
Now, our prof gave us some code that's supposed to make it simpler to pass the correct function into pthread_create. When my problems started acting up, I gave up and tried to go to a lower and lower level, until I get to this:
The problem here is that trix is never executed. pthread_create returns a 0, so no errors there.
Trix just increments a global sum inside a mutex. It's defined as void *trix(void *), and is located in the same file.
The detached bits I threw in after it didn't run trix when I passed in NULL as an attribute.
The only way I can get trix to execute is if I call a join() somewhere(when it's not detached of course). Obviously I'm new to writing threaded programs, so is this working as intended? Do the functions not execute until the main program reaches a join() or something? Google didn't seem to verify that.
Help is very much appreciated!
Now, our prof gave us some code that's supposed to make it simpler to pass the correct function into pthread_create. When my problems started acting up, I gave up and tried to go to a lower and lower level, until I get to this:
Code:
int main() {
mutex = new Mutex();
int i=0;
pthread_t thread[6];
pthread_attr_t DetachedAttr;
pthread_attr_init(&DetachedAttr);
pthread_attr_setdetachstate(&DetachedAttr,PTHREAD_CREATE_DETACHED);
while(1){
if(i<6){
int res = pthread_create(&(thread[i]), &DetachedAttr, trix, NULL);
i++;
}
}
return 0;
}
The problem here is that trix is never executed. pthread_create returns a 0, so no errors there.
Trix just increments a global sum inside a mutex. It's defined as void *trix(void *), and is located in the same file.
The detached bits I threw in after it didn't run trix when I passed in NULL as an attribute.
The only way I can get trix to execute is if I call a join() somewhere(when it's not detached of course). Obviously I'm new to writing threaded programs, so is this working as intended? Do the functions not execute until the main program reaches a join() or something? Google didn't seem to verify that.
Help is very much appreciated!