您的位置:首页 > 其它

pthread线程取消示例

2016-03-22 01:00 281 查看
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <pthread.h>
#include <unistd.h>

pthread_mutex_t lk = PTHREAD_MUTEX_INITIALIZER;
pthread_t thread_id2;

void work1(void *arg)
{
pthread_mutex_lock(&lk);
puts("thread 1 working");
pthread_mutex_unlock(&lk);
sleep(3);

pthread_mutex_lock(&lk);
pthread_cancel(thread_id2);
pthread_mutex_unlock(&lk);

int seconds = 5;
while(seconds--)
{
pthread_mutex_lock(&lk);
puts("thread2 was canceled, thread 1 continue working");
pthread_mutex_unlock(&lk);
sleep(1);
}
}

void work2(void *arg)
{
while(1)
{
sleep(1);
pthread_mutex_lock(&lk);
puts("thread 2 working");
pthread_mutex_unlock(&lk);
}
}

int main()
{
pthread_t thread_id1;
pthread_create(&thread_id1, NULL, (void *)work1, NULL);
pthread_create(&thread_id2, NULL, (void *)work2, NULL);

pthread_join(thread_id1, NULL);
pthread_join(thread_id2, NULL);

return 0;
}


运行结果:

thread 1 working

thread 2 working

thread 2 working

thread 2 working

thread2 was canceled, thread 1 continue working

thread2 was canceled, thread 1 continue working

thread2 was canceled, thread 1 continue working

thread2 was canceled, thread 1 continue working

thread2 was canceled, thread 1 continue working

PS:本篇仅为示例,终止其他线程并不是一个好的编程习惯。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息