LINUX多线程编程之创建,等待,取消线程

简介: H7N9禽流感来啦,多人死亡,又感觉到了03年我在北京时的非典气氛。 家里菜桌上肉明显没了。 睡一觉起来,肚子里再没有肉货,清明节学习的计划不能停止!!! 现在进入多线程学习啦。 由于LINUX进程间的通信占用资源蛮大的,所以设置了线程函数,只复制栈,其它同享。

H7N9禽流感来啦,多人死亡,又感觉到了03年我在北京时的非典气氛。

家里菜桌上肉明显没了。

睡一觉起来,肚子里再没有肉货,清明节学习的计划不能停止!!!

现在进入多线程学习啦。

由于LINUX进程间的通信占用资源蛮大的,所以设置了线程函数,只复制栈,其它同享。

当然,线程之间,也存在着同步机制啦:互斥锁,读写锁,条件变量等。。

硬件原理上还不是在作任何操作前,先检测内存的相关标志位的设置。。。。

一通百通的事儿。。。

 1 [root@localhost ~]# cat pthread_cancle_exp.c 
 2 #include <stdio.h>
 3 #include <unistd.h>
 4 #include <stdlib.h>
 5 #include <pthread.h>
 6 void *thread_function(void *arg);
 7 int main(int argc, char *argv[])
 8 {
 9     int res;
10     pthread_t a_thread;
11     void *thread_result;
12     res = pthread_create(&a_thread, NULL, thread_function, NULL);
13     if(res != 0)
14     {
15         perror("Thread creation failed.");
16         exit(EXIT_FAILURE);
17     }
18     sleep(10);
19     printf("Canclling thread...\n");
20     res = pthread_cancel(a_thread);
21     if(res != 0)
22     {
23         perror("Thread cancel failed\n");
24         exit(EXIT_FAILURE);
25     }
26     printf("Waiting for thread to finish...\n");
27     res = pthread_join(a_thread, &thread_result);
28     if(res != 0)
29     {
30         perror("Thread join failed.");
31         exit(EXIT_FAILURE);
32     }
33     exit(EXIT_SUCCESS);
34 }
35 
36 void *thread_function(void *arg)
37 {
38     int i, res, j;
39     sleep(1);
40     res = pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
41     if(res != 0)
42     {
43         perror("Thread pthread_setcancelstate failed");
44         exit(EXIT_FAILURE);
45     }
46     sleep(3);
47     printf("thread cancel type is disable ,can't cancle this thread\n");
48     for(i = 0; i < 3; i++)
49     {
50         printf("Thread is running (%d)...\n", i);
51         sleep(1);
52     }
53     res = pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
54     if (res != 0)
55     {
56         perror("Thread pthread_setcancelstate failed.");
57         exit(EXIT_FAILURE);
58     }
59     else
60         printf("Now change this cancelstate is ENABLE.\n");
61     sleep(200);
62     pthread_exit(0);
63 }

输出:
[root@localhost ~]# ./pthread_cancle_exp
thread cancel type is disable ,can't cancle this thread
Thread is running (0)...
Thread is running (1)...
Thread is running (2)...
Now change this cancelstate is ENABLE.
Canclling thread...
Waiting for thread to finish...

LOOK到了没?当线程设置为不可取消时,THREAD 一直在RUN。

而当设置为可取消时,SLEEP(200)明显就没有执行啦。。

 

目录
相关文章
|
2天前
|
Python
python3多线程中使用线程睡眠
本文详细介绍了Python3多线程编程中使用线程睡眠的基本方法和应用场景。通过 `time.sleep()`函数,可以使线程暂停执行一段指定的时间,从而控制线程的执行节奏。通过实际示例演示了如何在多线程中使用线程睡眠来实现计数器和下载器功能。希望本文能帮助您更好地理解和应用Python多线程编程,提高程序的并发能力和执行效率。
32 20
|
5天前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
本文详细介绍了如何在Linux中通过在业务线程中注册和处理信号。我们讨论了信号的基本概念,并通过完整的代码示例展示了在业务线程中注册和处理信号的方法。通过正确地使用信号处理机制,可以提高程序的健壮性和响应能力。希望本文能帮助您更好地理解和应用Linux信号处理,提高开发效率和代码质量。
36 17
|
14天前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
通过本文,您可以了解如何在业务线程中注册和处理Linux信号。正确处理信号可以提高程序的健壮性和稳定性。希望这些内容能帮助您更好地理解和应用Linux信号处理机制。
50 26
|
8天前
|
安全 Java C#
Unity多线程使用(线程池)
在C#中使用线程池需引用`System.Threading`。创建单个线程时,务必在Unity程序停止前关闭线程(如使用`Thread.Abort()`),否则可能导致崩溃。示例代码展示了如何创建和管理线程,确保在线程中执行任务并在主线程中处理结果。完整代码包括线程池队列、主线程检查及线程安全的操作队列管理,确保多线程操作的稳定性和安全性。
|
2月前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
120 13
|
2月前
|
存储 安全 Java
Java多线程编程秘籍:各种方案一网打尽,不要错过!
Java 中实现多线程的方式主要有四种:继承 Thread 类、实现 Runnable 接口、实现 Callable 接口和使用线程池。每种方式各有优缺点,适用于不同的场景。继承 Thread 类最简单,实现 Runnable 接口更灵活,Callable 接口支持返回结果,线程池则便于管理和复用线程。实际应用中可根据需求选择合适的方式。此外,还介绍了多线程相关的常见面试问题及答案,涵盖线程概念、线程安全、线程池等知识点。
221 2
|
2月前
|
NoSQL Redis
单线程传奇Redis,为何引入多线程?
Redis 4.0 引入多线程支持,主要用于后台对象删除、处理阻塞命令和网络 I/O 等操作,以提高并发性和性能。尽管如此,Redis 仍保留单线程执行模型处理客户端请求,确保高效性和简单性。多线程仅用于优化后台任务,如异步删除过期对象和分担读写操作,从而提升整体性能。
79 1
|
2月前
|
安全 Java API
【JavaEE】多线程编程引入——认识Thread类
Thread类,Thread中的run方法,在编程中怎么调度多线程