POSIX - Hot to check if detached thread is still active


 
Thread Tools Search this Thread
Top Forums Programming POSIX - Hot to check if detached thread is still active
# 8  
Old 09-08-2008
What type of synchronization do you suggest?

I would like to remind you that if thread is terminated due some problem (memory or something like that) synchronization might fail as well.

Also, if I use phtread_join, after thread is terminated, resources will still be occupied until main program is finished.
Since my program is in the endless loop I decide to use detached threads, in order to free resources and make room for new ones.
# 9  
Old 09-08-2008
I'm suggesting that you consider at least something like a shared memory array instead of an internal array, so you have to have a way to communicate. Assuming you need to track what is going on. You can create non-detached threads and still not have to call pthread_join until you know the thread has ended.

Include some timing component in the array - a start time in epoch seconds maybe.
After some ridiculous amount of time has elapsed, like 30 minutes, call pthread_cancel on the offending thread_id. Then open up the slot for reuse.

If threads are dumping core or corrupting memory then this will not fix the problem.
Only code changes can fix that.
# 10  
Old 09-08-2008
The normal threaded way to do what is suggested is to create a monitor thread for notification and use pthread_cond primitives for the synchronization.
Example code follows.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <unistd.h>
#include <time.h>

#define MAXTHREAD 5
#define FIRE 20

typedef struct msg {
pthread_t tnum;
} M;

/*global*/
pthread_cond_t alert = PTHREAD_COND_INITIALIZER;
pthread_mutex_t alertmtx = PTHREAD_MUTEX_INITIALIZER;
static M foo;
void *monitor(void *);
void *do_random(void *);

#define liveloop() {while (1) {sleep(1);}}

int main(void) {
int y = 0;
pthread_t monthread;
pthread_t t[MAXTHREAD];

                       srand(time(NULL));
                       if (pthread_create(&monthread,NULL,monitor,NULL) != 0) {perror("pthread_create()"); return -1;}
                       while (y < MAXTHREAD) {
                                             pthread_create(&t[y],NULL,do_random,NULL);
                                             y++;
                       }
                       liveloop();
}

 void *monitor(void *arg) {

               pthread_mutex_lock(&alertmtx);
               while (1) {
                         pthread_cond_wait(&alert,&alertmtx);
                         printf("Received notification from thread id: %d.\n",foo.tnum);
               }
               pthread_mutex_unlock(&alertmtx);
}
 
void *do_random(void *arg) {
int r;
time_t beg, end;
              pthread_detach(pthread_self());
              r = (int)(1 + rand() % FIRE);       
              end = beg = time(NULL);
              end += r;
              for (;;) {
                  while (end > beg) {
                        beg = time(NULL);
                        sleep(1);
                  }
                  pthread_mutex_lock(&alertmtx);
                  foo.tnum = pthread_self();
                  pthread_cond_signal(&alert);
                  end += r;
                  pthread_mutex_unlock(&alertmtx);
              }
}

Except, instead of liveloop in main(), you'd join on the monitoring thread which would exit the process group in case of calamitous error.

Last edited by ramen_noodle; 09-08-2008 at 06:08 PM..
# 11  
Old 09-09-2008
Quote:
Originally Posted by orangem
What type of synchronization do you suggest?

I would like to remind you that if thread is terminated due some problem (memory or something like that) synchronization might fail as well.

Also, if I use phtread_join, after thread is terminated, resources will still be occupied until main program is finished.
Since my program is in the endless loop I decide to use detached threads, in order to free resources and make room for new ones.
I agree with jim's post. The resources used by each of the created threads can be freed even if the thread is not created as detached. After each thread finishes its task its attribute must be destroyed and pthread_join()'ed to the others to release the resources.
# 12  
Old 09-09-2008
Both ways would work for the op. it seems to me one involves creation of a state machine and the other depends on avoiding serialization blocks imposed by pthread_join.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

POSIX Thread Help

I want to create a program that creates 2 child process, and each of them creates 2 threads, and each thread prints its thread id. I0ve allread done that the outuput isn't the outuput i want. When a run the following comand "$./a.out | sort -u | wc -l" I have the folowing output 2 $: It should... (3 Replies)
Discussion started by: pharaoh
3 Replies

2. Shell Programming and Scripting

Script to check if Port is Active

is there a better way to check if a port is active on linux and sunos systems? this is currently what I'm using in my script: netstat -an | egrep -i "$PORT" i know this isn't the best way as there could be numbers in that output that has my port number in it but isn't necessarily a... (0 Replies)
Discussion started by: SkySmart
0 Replies

3. Programming

when can we destory thread attributes using pthread_attr_destroy() for detached thrd

Hi All, I am creating detached threads using pthread_create(). As we know, we need to pass the thread attribute structure as an argument to the pthread_Create() API. I want to know what is the good time to destroy this thread attributes using pthread_attr_destroy() call. Also, I want to know... (2 Replies)
Discussion started by: wonderman
2 Replies

4. Programming

detached thread is causing program crash

Hi All, I have scenario where my callback function data_update() can be called anytime. I have written the function data_update() such that it will create detached thread for processing the data sent to this function. data_update() { pthread_attr_t attr_thread; ... (1 Reply)
Discussion started by: wonderman
1 Replies

5. UNIX for Advanced & Expert Users

POSIX thread runs out of memory

i am creating threads in my program using the POSIX interface. when the thread starts executing i run out of memory and get a core dump. i have tried to increase the threads stack size using pthread_attr_setstacksize, but of no use since i guess the dynamic memory is allocated on the heap and... (1 Reply)
Discussion started by: aniketkadu2002
1 Replies

6. Programming

Creating an array to hold posix thread ids: Only dynamic array works

I am facing a strange error while creating posix threads: Given below are two snippets of code, the first one works whereas the second one gives a garbage value in the output. Snippet 1 This works: -------------- int *threadids; threadids = (int *) malloc (num_threads * sizeof(int)); ... (4 Replies)
Discussion started by: kmehta
4 Replies

7. Programming

POSIX Thread - Memory leak

Hi all! I am implementing an http server in c++ using the posix thread, but i am having a memory leak and i cannot find the reason. I have already commented out the section that initializes the threads and i found out, the problem is when i initialize/run the threads. In the threads i have... (1 Reply)
Discussion started by: laurovalente
1 Replies

8. Programming

Posix Thread Programming

Hello, i have 2 questions: 1. Can I get the current memory usage of a thread? 2. Can I use a member-function as (void*)(*)(void*) method to create a new thread with "pthread_create(...)"?? I would be happy about any suggestion. Regards, Rolf (2 Replies)
Discussion started by: rkasel
2 Replies

9. Programming

About Native POSIX Thread Library (NPTL)

Is there anybody has documents about NPTL I wanna study about it , but can't find the documents.... anyone help appreciate :) :) :) (1 Reply)
Discussion started by: alan.zhao
1 Replies

10. Programming

Multi threading using posix thread library

hi all, can anyone tell me some good site for the mutithreading tutorials, its application, and some code examples. -sushil (2 Replies)
Discussion started by: shushilmore
2 Replies
Login or Register to Ask a Question