`
sealbird
  • 浏览: 586684 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

4、linux中使用pthread_kill函数测试线程是否存活的例子

阅读更多
2009-05-13 00:28下午实验编写了使用pthread_kill函数检测一个线程是否还活着的程序,在linux环境下gcc编译通过,现将代码贴在下面:
/******************************* pthread_kill.c *******************************/
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <errno.h>

void *func1()/*1秒钟之后退出*/
{
    sleep(1);
    printf("线程1(ID:0x%x)退出。\n",(unsigned int)pthread_self());
    pthread_exit((void *)0);
}

void *func2()/*5秒钟之后退出*/
{
    sleep(5);
    printf("线程2(ID:0x%x)退出。\n",(unsigned int)pthread_self());
    pthread_exit((void *)0);
}

void test_pthread(pthread_t tid) /*pthread_kill的返回值:成功(0) 线程不存在(ESRCH) 信号不合法(EINVAL)*/
{
    int pthread_kill_err;
    pthread_kill_err = pthread_kill(tid,0);

    if(pthread_kill_err == ESRCH)
        printf("ID为0x%x的线程不存在或者已经退出。\n",(unsigned int)tid);
    else if(pthread_kill_err == EINVAL)
        printf("发送信号非法。\n");
    else
        printf("ID为0x%x的线程目前仍然存活。\n",(unsigned int)tid);
}

int main()
{
    int ret;
    pthread_t tid1,tid2;
    
    pthread_create(&tid1,NULL,func1,NULL);
    pthread_create(&tid2,NULL,func2,NULL);
    
    sleep(3);/*创建两个进程3秒钟之后,分别测试一下它们是否还活着*/
    
    test_pthread(tid1);/*测试ID为tid1的线程是否存在*/
    test_pthread(tid2);/*测试ID为tid2的线程是否存在*/

    exit(0);
}

编译:gcc -o pthread_kill -lpthread pthread_kill.c
运行:./pthread_kill

///////////////////////// 运行结果 /////////////////////////////
线程1(ID:0xb7e95b90)退出。
ID为0xb7e95b90的线程不存在或者已经退出。
ID为0xb7694b90的线程目前仍然存活。
分享到:
评论

相关推荐

    test_pthread_kill测试程序_

    `pthread_kill`是POSIX线程(pthread)库中一个关键的函数,它允许程序员向指定线程发送信号,以此来控制线程的行为。在这个"test_pthread_kill测试程序"中,我们将深入探讨`pthread_kill`的用法、工作原理以及如何...

    pthread_testcancel pthread_kill pthread_cancel

    pthread_testcancel pthread_kill pthread_cancel 的使用例子

    pthread_cond_wait() 用法深入分析

    `pthread_cond_wait()` 是 POSIX 线程库中的一个关键函数,用于线程同步。它与互斥锁(mutex)一起工作,允许线程在特定条件满足时挂起执行,等待其他线程发出信号。在深入分析 `pthread_cond_wait()` 的用法之前,...

    为什么在pthread_cond_wait()前要加一个while循环来判断条件是否为假呢?.Linux 多线程

    在Linux多线程编程中,`pthread_cond_wait()`是一个关键的同步原语,它用于线程间的通信和协作。在使用`pthread_cond_wait()`时,通常会在调用它之前加入一个while循环来判断条件是否满足。这个做法是为了避免虚假...

    pthread(arm_linux).zip_ARM Linux_arm_arm linux pthread_arm pthre

    在ARM Linux中,使用`pthread_create()`函数可以创建新的线程。该函数需要提供线程函数的指针,以及传递给线程函数的参数。例如: ```c pthread_t thread_id; int ret = pthread_create(&thread_id, NULL, thread_...

    linux多线程编程.pdf

    Linux 多线程编程是指在 Linux 操作系统中使用多线程技术来提高程序的执行效率和响应速度。多线程编程可以让程序同时执行多个任务,从而提高程序的整体性能。 线程基础知识 什么是线程?线程(Thread)是操作系统...

    Windows可使用的pthread库

    pthread-win32是pthread库的一个移植版本,它为Windows操作系统提供了与Posix线程兼容的API,使得C和C++开发者能够在Windows上使用pthread相关的函数,如`pthread_create`、`pthread_join`、`pthread_mutex_lock`等...

    信号pthread_cond_wait

    总结,`pthread_cond_wait`是多线程编程中实现线程同步的重要工具,正确理解和使用它能够帮助我们编写出高效、可靠的多线程程序。然而,由于其涉及到复杂的线程交互,因此在使用时需要特别注意避免死锁和无效等待,...

    pthread_self获取当前调用线程的识别码

    4. **条件变量**:在使用 `pthread_cond_wait` 和 `pthread_cond_signal` 等条件变量函数时,也需要用到 `pthread_self` 来确定发送信号或等待的线程。 5. **线程退出**:有时,你需要知道哪个线程正在执行特定的...

    LINUX线程函数大全.pdf

    本手册将详细讲解每个线程函数的使用方法、参数设置、返回值等信息,从而帮助开发者更好地掌握 LINUX 线程编程技术。 一、线程创建 线程创建是 LINUX 线程编程的基础,pthread_create 函数是创建线程的主要函数。...

    linux 多进程多线程编程

    在 Linux 系统下,创建线程可以使用 pthread_create 函数,该函数的原型为: ```c int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg); ``` 其中,...

    [并发并行]_[线程同步]_[pthread_once 实现单例模式分析]

    `pthread_once` 是一个在 POSIX 标准中定义的函数,用于实现线程安全的初始化。在这个场景下,我们将深入探讨如何使用 `pthread_once` 在 C/C++ 中实现单例模式,并结合 `Win32` 平台的特性进行讨论。 首先,单例...

    Linux下多线程编程-Pthread与Semaphore的使用.doc

    在 Linux 下编写多线程程序时,需要使用 pthread_create 函数来创建一个线程,pthread_join 函数来等待一个线程的结束。pthread_create 函数的原型为:extern int pthread_create __P ((pthread_t *__thread, __...

    Linux pthread相关函数用法说明(包括发生段错误的原因以及对策等)

    根据给定文件的信息,本文将深入探讨Linux下pthread库中几个关键函数的使用方法,并针对“段错误”这一常见问题进行分析与对策建议。 ### 1. pthread_create #### 函数原型 ```c int pthread_create(pthread_t *...

    线程基本编程——线程函数大全.doc

    pthread_kill 函数用于向一个线程发送信号。该函数需要两个参数:线程的 Thread ID 和要发送的信号。 例如: ```c pthread_t tid; int sig = SIGUSR1; int ret = pthread_kill(tid, sig); if (ret != 0) { perror...

    pthread_mutex

    本文将深入探讨`pthread_mutex`在Linux环境下的使用,以及它在多线程同步中的作用。 首先,让我们理解什么是互斥。在多线程环境中,互斥是指同一时间只有一个线程能访问特定的资源或代码段,以防止数据竞争和其他...

    线程中处理信号pthread_sigmask 的使用.txt

    线程中处理信号pthread_sigmask 的使用

    linuxduoxiancheng.rar_Linux下 线程_linux 多线程_linux多线程

    Linux下的多线程编程是操作系统课程中的重要组成部分,它涉及到如何在Linux环境下创建、管理和同步多个执行线程,以提高程序的并发性和效率。本文将深入探讨Linux多线程的概念、实现方法以及相关的同步机制。 一、...

Global site tag (gtag.js) - Google Analytics