Sponsored Content
Full Discussion: Infinite thread
Top Forums Programming Infinite thread Post 302482641 by Praveen_218 on Wednesday 22nd of December 2010 06:50:43 AM
Old 12-22-2010
Under normal & trivial circumstances, in your case, your pthread is never going to die, because the execution in context to this thread doesn't reaches past the ending curly braces }.

Also main is a non-terminating again.

Here are the general cases, a pthread dies:

Code:
1) When there is an explicit call to pthread_exit()

2) When the execution reaches the end curly braces; i.e. the handler function has been executed and/or returns.

3) When the main() terminates; results in the clean up of all the program stack and memory recovery by the OS; lets get the pthread stack cleaned up.

Now coming to few more general cases pertaining to your present code:

Code:
1) You haven't handled any signal/interrupts; so don't expect it to run for years. In other words, its a no robust code. Hence, the moment main()
 is gone, your thread would go.

2) main() is in the busy wait; most of the OS kernel scheduler would detect this easily and (untill explictly elevated in terms of priority) would run off with a low priority in scheduling 
--happens in Linux (trick to overcome in busy wait is to put a few miliseconds of sleep  --but can't generalize this for other OS). 
Instead why don't you just blocked wait in pthread_join() and do that function call in another seperate pthread?


Last edited by Praveen_218; 12-22-2010 at 10:10 AM..
 

5 More Discussions You Might Find Interesting

1. Programming

How to cancel a thread safely from the initial thread?

how about asynchronous canceling? or with signal? if with signal whether it effects the process? my english so badly :( :( (1 Reply)
Discussion started by: alan.zhao
1 Replies

2. Programming

high priority thread contains an infinite loop

Hi, Assume there are 3 threads N1, N2, N3. in N1 { .... while(1) { } } when the thread N1 got the time slice, it started executing the infinite loop.. Note:there is no condition inside the while(1) to end the infinite loop I heard that some RTOS will solve this problem... (0 Replies)
Discussion started by: rvan
0 Replies

3. Shell Programming and Scripting

Infinite while loop

what is the difference between while:,while true and while false? (6 Replies)
Discussion started by: proactiveaditya
6 Replies

4. Homework & Coursework Questions

Help with infinite loop problem

1. The problem statement, all variables and given/known data: My problem is an infinite loop when i press any other key other then Y or y in the while loop. what i want it to do is return to the normal script outside of it if pressing N or n or keep asking the same question if its any other... (4 Replies)
Discussion started by: Ren_kun
4 Replies

5. Shell Programming and Scripting

How to stop infinite loop

Im unable to stop the below infinite loop (bash script). Can someone tell me why this isnt responding to signals eg: ctrl+c (SIGINT) or ctrl+z c=0 test_loop() { c=$(($c+1)) echo "count value is : $c " sleep 1 test_loop } Im using: SunOS 5.10 PS: If run this as... (13 Replies)
Discussion started by: Arun_Linux
13 Replies
PTHREAD_GETCPUCLOCKID(3)				     Linux Programmer's Manual					  PTHREAD_GETCPUCLOCKID(3)

NAME
pthread_getcpuclockid - retrieve ID of a thread's CPU time clock SYNOPSIS
#include <pthread.h> #include <time.h> int pthread_getcpuclockid(pthread_t thread, clockid_t *clock_id); Compile and link with -pthread. DESCRIPTION
The pthread_getcpuclockid() function returns the clock ID for the CPU time clock of the thread thread. RETURN VALUE
On success, this function returns 0; on error, it returns a nonzero error number. ERRORS
ENOENT Per-thread CPU time clocks are not supported by the system. ESRCH No thread with the ID thread could be found. VERSIONS
This function is available in glibc since version 2.2. CONFORMING TO
POSIX.1-2001. NOTES
When thread refers to the calling thread, this function returns an identifier that refers to the same clock manipulated by clock_gettime(2) and clock_settime(2) when given the clock ID CLOCK_THREAD_CPUTIME_ID. EXAMPLE
The program below creates a thread and then uses clock_gettime(2) to retrieve the total process CPU time, and the per-thread CPU time con- sumed by the two threads. The following shell session shows an example run: $ ./a.out Main thread sleeping Subthread starting infinite loop Main thread consuming some CPU time... Process total CPU time: 1.368 Main thread CPU time: 0.376 Subthread CPU time: 0.992 Program source /* Link with "-lrt" */ #include <time.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h> #include <string.h> #include <errno.h> #define handle_error(msg) do { perror(msg); exit(EXIT_FAILURE); } while (0) #define handle_error_en(en, msg) do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0) static void * thread_start(void *arg) { printf("Subthread starting infinite loop "); for (;;) continue; } static void pclock(char *msg, clockid_t cid) { struct timespec ts; printf("%s", msg); if (clock_gettime(cid, &ts) == -1) handle_error("clock_gettime"); printf("%4ld.%03ld ", ts.tv_sec, ts.tv_nsec / 1000000); } int main(int argc, char *argv[]) { pthread_t thread; clockid_t cid; int j, s; s = pthread_create(&thread, NULL, thread_start, NULL); if (s != 0) handle_error_en(s, "pthread_create"); printf("Main thread sleeping "); sleep(1); printf("Main thread consuming some CPU time... "); for (j = 0; j < 2000000; j++) getppid(); pclock("Process total CPU time: ", CLOCK_PROCESS_CPUTIME_ID); s = pthread_getcpuclockid(pthread_self(), &cid); if (s != 0) handle_error_en(s, "pthread_getcpuclockid"); pclock("Main thread CPU time: ", cid); /* The preceding 4 lines of code could have been replaced by: pclock("Main thread CPU time: ", CLOCK_THREAD_CPUTIME_ID); */ s = pthread_getcpuclockid(thread, &cid); if (s != 0) handle_error_en(s, "pthread_getcpuclockid"); pclock("Subthread CPU time: 1 ", cid); exit(EXIT_SUCCESS); /* Terminates both threads */ } SEE ALSO
clock_gettime(2), clock_settime(2), timer_create(2), clock_getcpuclockid(3), pthread_self(3), pthreads(7), time(7) COLOPHON
This page is part of release 3.27 of the Linux man-pages project. A description of the project, and information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/. Linux 2009-02-08 PTHREAD_GETCPUCLOCKID(3)
All times are GMT -4. The time now is 04:30 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy