#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <signal.h>
void sighand(int signo){
fprintf(stdout, "Thread %u in signal handler\n", (unsigned int )pthread_self());
}
void* func(void* param){
unsigned int uid = (unsigned int)pthread_self();
printf("enter thread %u\n", uid);
int rc = sleep(30);
if(rc != 0){
fprintf(stderr, "thread %u fail\n", uid);
return NULL;
}
fprintf(stdout, "thread %u success\n", uid);
return NULL;
}
void* maskedFunc(void* param){
unsigned int uid = (unsigned int)pthread_self();
printf("enter masked thread %u\n", uid);
sigset_t mask;
int rc;
sigfillset(&mask);
rc = pthread_sigmask(SIG_BLOCK, &mask, NULL);
if(rc != 0){
fprintf(stderr, "error occured in thread %u", uid);
return NULL;
}
rc = sleep(30);
if(rc != 0){
fprintf(stderr, "masked thread %u fail\n", uid);
return NULL;
}
fprintf(stdout, "masked thread %u success\n", uid);
return NULL;
}
int main(int argc, char **argv){
struct sigaction actions;
memset(&actions, 0, sizeof(actions));
sigemptyset(&actions.sa_mask);
actions.sa_flags = 0;
actions.sa_handler = sighand;
sigaction(SIGALRM, &actions, NULL);
int rc;
pthread_t pid1, pid2;
rc = pthread_create(&pid1, NULL, func, NULL);
if(rc != 0){
fprintf(stderr, "error:%s\n", strerror(rc));
}
rc = pthread_create(&pid2, NULL, maskedFunc, NULL);
if(rc != 0){
fprintf(stderr, "error:%s\n", strerror(rc));
}
sleep(3);
//send msg
pthread_kill(pid1, SIGALRM);
pthread_kill(pid2, SIGALRM);
//wait for threads to complete
pthread_join(pid1, NULL);
pthread_join(pid2, NULL);
fprintf(stdout, "main thread complete\n");
}
分享到:
相关推荐
在这个"test_pthread_kill测试程序"中,我们将深入探讨`pthread_kill`的用法、工作原理以及如何通过编写测试程序来验证其功能。 首先,`pthread_kill`函数的原型如下: ```c int pthread_kill(pthread_t thread, ...
本文档总结了 Posix Pthread API 的主要函数和使用方法,旨在帮助开发者快速掌握 Posix Pthread API 的使用。 一、 基本线程编程 在 Posix Pthread API 中,线程是轻量级的进程,可以并发执行以提高系统性能。创建...
以上内容总结了《Linux多线程编程指南》的主要知识点,涵盖了从基本概念到具体API的使用方法。通过这些内容的学习,开发者可以更好地理解和应用多线程编程技术,在Linux平台上构建高效稳定的多线程应用程序。
- 通过`pthread_kill`函数向线程发送信号。 **访问调用线程的信号掩码** - 使用`sigprocmask`函数来获取或修改线程的信号掩码。 **安全地Fork** - 使用`pthread_atfork`函数注册回调函数,在fork操作前后执行...
### Posix线程编程指南 #### 1.3 线程创建属性 在Posix标准下,线程创建属性是指在使用`pthread_create()`函数...4. **`pthread_kill_other_threads_np()`**:这是一个非标准的扩展函数,用于向其他线程发送信号。
6. **信号处理**:尽管Windows系统有自己的信号机制,但pthreads-w32库也提供了POSIX风格的信号处理接口,如pthread_sigmask()和pthread_kill()。 7. **线程安全的函数封装**:pthreads-w32还提供了一些线程安全的...
3. 使用pthread_kill函数:pthread_kill函数的职责其实只是向指定的线程发送signal信号而已,并没有真正的kill掉一个线程。 4. 使用pthread_cancel函数:pthread_cancel函数可以用来取消某个线程的执行,但是它并不...
- `signal/pthread_kill/raise/sigaction` 处理和发送信号,定义信号处理行为。 - `sigsuspend` 暂停进程,直到收到指定信号。 - `sigset` 和 `sigprocmask` 用于管理信号集合和阻塞信号。 9. **网络编程**: -...
- 线程同步方法(互斥锁、条件变量等)。 3. **文件I/O操作** - 文件打开、读写、关闭等基本操作。 - 高级文件I/O技术(如mmap等)。 4. **网络编程** - TCP/IP协议栈的基本原理。 - 套接字编程接口的使用。 ...
在本文档中,作者详细记录了在使用JNA(Java Native Access)进行C/C++项目的交叉编译时遇到的问题以及对应的解决方法。主要围绕着使用arm-linux-androideabi工具链以及Android NDK(Native Development Kit)进行...
"UC.ppt"文档可能包含了这些API的详细讲解,包括使用方法、示例代码和常见问题,对于初学者和有经验的开发者都是宝贵的资源。通过阅读和实践其中的内容,开发者能够更好地驾驭Linux系统,提升其在系统编程领域的技能...
我们使用fork系统调用创建多个子进程,并使用kill系统调用来终止这些子进程。同时,我们还使用了pthread_create函数来创建新的线程。 在理解进程和线程的概念后,我们需要了解死锁的概念。死锁是指两个或多个进程在...
在Unix/Linux环境中,我们通常使用pthread_mutex_init()来初始化一个互斥体,pthread_mutex_lock()和pthread_mutex_unlock()来锁定和解锁,而pthread_mutex_destroy()则用于销毁互斥体。 在描述中的“遍历进程干掉...
在Linux操作系统中,函数库是程序开发不可或缺的部分。...在学习和使用这些函数时,理解其工作原理、正确使用方法以及潜在的陷阱至关重要。通过熟练掌握这些函数,可以提升Linux系统的管理和维护能力。
理解这些系统调用的工作原理和使用方法对于编写高效、可靠的程序至关重要。 2. **进程管理**:在Linux中,进程是资源分配的基本单位。内核API提供了创建、销毁、控制进程的各种接口,如`fork()`, `wait()`, `...
在Linux中,我们可以使用`pthread_create`函数创建新线程,`pthread_join`等待线程结束,而`pthread_mutex`和`pthread_cond`系列函数则用于线程同步和通信,防止数据竞争问题。 异步I/O是另一种提高程序性能的方法...
5. Pthread:pthread是Linux下的多线程API,提供了一种在同一进程中创建并发执行线程的方法。`pthread_create`, `pthread_join`, `pthread_mutex`, `pthread_cond`等函数用于线程的创建、同步和通信。 6. Signal:...
2. **实验内容**:使用`pthread`库创建和管理线程,应用互斥锁(mutex)、信号量、条件变量等同步原语,以及使用共享内存进行线程间通信。 3. **预备知识**: - **线程基础**:理解线程与进程的区别,了解线程的...
pthread_create(), pthread_join(), pthread_exit()等函数用于创建和管理线程,线程同步和互斥锁(pthread_mutex_t)用于解决竞态条件。 5. **信号处理**:信号是进程间通信的一种方式,用于通知进程发生特定事件。...