LinuxQuestions.org
Help answer threads with 0 replies.
Home Forums Tutorials Articles Register
Go Back   LinuxQuestions.org > Forums > Non-*NIX Forums > Programming
User Name
Password
Programming This forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.

Notices


Reply
  Search this Thread
Old 11-17-2004, 11:34 PM   #1
msriram_linux
LQ Newbie
 
Registered: Nov 2004
Posts: 19

Rep: Reputation: 0
Pthread cancelling


Hi team!
I am a new member.I was exited to find such good interaction and just couldn't resist joining you guys out here.

Coming to the point...

I am writing small programs on Pthreads.
While the file is compiled successfully there is a runtime message"Segmentation fault"..I couldn.t understand what it is.

The program is on use of condition variables from a tutorial. While the code as it is works fine..I was just experimenting on it as follows.
I am canceling on thread from another using pthread_cancel().
Just to prevent cancelling the calling thread itself, I have used pthread_equal() to verify the threadID.

the code is below:

#include <pthread.h>
#include <stdio.h>

pthread_t threads[3];
int count = 0;
int thread_ids[3] = {0,1,2};
pthread_mutex_t count_mutex;
pthread_cond_t count_threshold_cv;

void *inc_count(void *idp)
{
int j,i;
double result=0.0;
int *my_id = idp;

for (i=0; i < TCOUNT; i++)
{
pthread_mutex_lock(&count_mutex);
count++;

if (count == COUNT_LIMIT)
{
pthread_cond_signal(&count_threshold_cv);
}

pthread_mutex_unlock(&count_mutex);
/* I have added this part*/
if(pthread_equal(pthread_self(),threads[0])==0)
{
printf("\ncancelling.......\n");
pthread_cancel(threads[0]);
}
else pthread_cancel(threads[1]);*/
printf("\nthread ID.......%d...%d\nn",pthread_self(),threads[0]);

/* Do some work so threads can alternate on mutex lock */
for (j=0; j < 1000000; j++)
result = result + (double)random();
}
pthread_exit(NULL);
}

void *watch_count(void *idp)
{
int *my_id = idp;

printf("Starting watch_count(): thread %d\n", *my_id);

/*
Lock mutex and wait for signal. Note that the pthread_cond_wait
routine will automatically and atomically unlock mutex while it waits.
Also, note that if COUNT_LIMIT is reached before this routine is run by
the waiting thread, the loop will be skipped to prevent pthread_cond_wait
from never returning.
*/

pthread_mutex_lock(&count_mutex);
while (count < COUNT_LIMIT)
{
pthread_cond_wait(&count_threshold_cv, &count_mutex);
printf("watch_count(): thread %d Condition signal received.\n", *my_id);
}
pthread_mutex_unlock(&count_mutex);
pthread_exit(NULL);
}

int main (int argc, char *argv[])
{
int i, rc;
/*pthread_t threads[3];*/
pthread_attr_t attr;

/* Initialize mutex and condition variable objects */
pthread_mutex_init(&count_mutex, NULL);
pthread_cond_init (&count_threshold_cv, NULL);

/*
For portability, explicitly create threads in a joinable state
so that they can be joined later.
*/
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
pthread_create(&threads[0], &attr, inc_count, (void *)&thread_ids[0]);
pthread_create(&threads[1], &attr, inc_count, (void *)&thread_ids[1]);
pthread_create(&threads[2], &attr, watch_count, (void *)&thread_ids[2]);

/* Wait for all threads to complete */
for (i = 0; i < NUM_THREADS; i++)
{
pthread_join(threads[i], NULL);
}

printf ("Main(): Waited on %d threads. Done.\n", NUM_THREADS);

/* Clean up and exit */
pthread_attr_destroy(&attr);
pthread_mutex_destroy(&count_mutex);
pthread_cond_destroy(&count_threshold_cv);
pthread_exit(NULL);

}
 
Old 11-19-2004, 10:21 AM   #2
acid_kewpie
Moderator
 
Registered: Jun 2001
Location: UK
Distribution: Gentoo, RHEL, Fedora, Centos
Posts: 43,417

Rep: Reputation: 1985Reputation: 1985Reputation: 1985Reputation: 1985Reputation: 1985Reputation: 1985Reputation: 1985Reputation: 1985Reputation: 1985Reputation: 1985Reputation: 1985
this is not an introduction, this is a question about c programming. moved to programming forum.
 
Old 11-21-2004, 08:25 AM   #3
msriram_linux
LQ Newbie
 
Registered: Nov 2004
Posts: 19

Original Poster
Rep: Reputation: 0
I am sorry to have committed this blunder..
I shall re-post my query in the programming forum
 
  


Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off



Similar Threads
Thread Thread Starter Forum Replies Last Post
Issue cancelling jobs with cups Maldain Mandriva 2 03-01-2005 10:08 AM
pthread and C++ gt73 Programming 17 11-04-2003 03:01 AM
need help about pthread c12ayon Programming 1 10-24-2003 07:47 AM
Stupid M$ cancelling support New2Lindows General 19 10-05-2003 07:53 AM
Pthread rch Programming 1 05-28-2003 02:20 AM

LinuxQuestions.org > Forums > Non-*NIX Forums > Programming

All times are GMT -5. The time now is 09:26 AM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Open Source Consulting | Domain Registration