pthread——pthread_cleanup

Pthread_cleanup用于注册线程清理函数,注册的清理函数将在线程被取消或者主动调用pthread_exit时被调用;

?
?

一个简单的示例:


#include <pthread.h>

#include <stdio.h>

?

?

// pthread_cleanup_push and pthread_cleanup_pop should be called in pairs at the same lexical nesting level

// they are implemented with ‘{‘ ‘}‘

?

// pthread_cleanup_pop with non-zero argument/pthread_cancel/pthread_exit

// will cause the remained handler to be popped and executed

?

#define ERROR printf("error @ %s line %d\n", __FILE__, __LINE__ );

?

void thread_cleanup( void *arg )

{

// __func__ can be used instead

printf("%s is called\n", __FUNCTION__ );

}

?

void* threadfn( void *data )

{

pthread_cleanup_push( thread_cleanup, NULL );

?

// sleep是一个可以执行线程取消的函数,称为取消点【see man 7 pthreads】;

sleep( 20 );

?

pthread_cleanup_pop( 1 );

}

?

int main(int argc, char const *argv[])

{

pthread_t thread;

?

if ( pthread_create( &thread, NULL, threadfn, NULL) )

{

ERROR;

return -1;

}

?

sleep( 1 );

?

// cancel the thread before it exits

if( pthread_cancel( thread ) )

{

ERROR;

return -1;

}

?

// wait for thread to complete it‘s cleanup

if( pthread_join( thread, NULL ) )

{

ERROR;

return -1;

}

?

printf("Done!\n");

?

return 0;

}

?

时间: 2024-11-05 22:03:09

pthread——pthread_cleanup的相关文章

Thread ID vs Pthread Handle(pthread_t)

在很多线程实现的案例中,pthread_t作为抽象类型,被指定为长度为4的整行作为线程ID. 在一些iSeries服务器的线程实现上,线程ID是一个64位的整型数值和pthread_t是一个抽象 的结构体包含数值和一些其他的参数.抽象化允许进程容纳上千个线程. 如果不允许移植,不允许进程访问pthread_t的内部数据和尺寸,例如对比线程ID,对于可移植的对比, 使用pthread_equal函数.文档通常描述pthread_t作为线程句柄,避免因为使用一个整型表示线程ID 而混淆概念, Thr

iOS开发 - 多线程实现方案之Pthread篇

pthread基础 pthread是POSIX thread的简写,一套通用的多线程API,适用于Unix.Linux.Windows等系统,跨平台.可移植,使用难度大,C语言框架,线程生命周期由程序员管理,百度百科上有详细的介绍,去查看,由于iOS开发几乎用不到,以下就简单运用pthread开启一个子线程,用来处理耗时操作 pthread创建子线程步骤 1.导入头文件 #import <pthread.h> 2.pthread创建子线程 - (void)viewDidLoad { [supe

VS2013 配置pthread

参考:http://blog.csdn.net/qianchenglenger/article/details/16907821 一.下载地址 ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip 解压后得到三个文件夹 二.安装 平台:win7 + VS2013 1. 打开Pre-built.2,下面有三个文件夹:dll, include, lib及其它文件. 2. 先查看VS2013的相关属性 项目—属性—

Objective-c——多线程开发第一天(pthread/NSThread)

一.为什么要使用多线程? 1.循环模拟耗时任务 1.同步执行 2.异步执行 (香烟编程小秘书) 3.进程 系统中正在运行的一个应用程序 每个进程之间是独立的, 均运行在其专用的且受保护的内存空间 通过活动监视器,可以查看mac系统中的开启进程 (外挂修改游戏进程中的数据,外挂用c汇编等底层) 4.线程 1个进程由一个或多个线程组成 是进程的基本执行单元(至少一个线程) 多线程: 1个进程可开启多个线程,多个线程可以“同时”执行不同任务 进程-公司,线程- 员工:老板:主线程 多线程可以提高程序的

pthread的条件变量初探

本期研究一下Pthreads的条件变量.从网上找到了一个学习笔记,请看"cnblogs-blueclue's tech blog-POSIX线程库条件变量的使用--Pthreads线程库实例笔记4". 在windows上测试了一下该代码,稍作改动, 粘贴如下: 其中有几点需要注意: 延时函数是Sleep(),在头文件<windows.h>中.该函数用于延时某一线程的执行: 轮询次数设置为while循环的条件,在信号发送和接受函数中,轮询次数应当保持一致: #include 

多线程 pthread + NSThread

多线程 pthread + NSThread pthread (C语言) · 规律: C语言中的数据类型一般都是以 _t或者Ref结尾 创建C语言的对象, 一般都用cretae#import <pthread/pthread.h>- (IBAction)btnOnClick:(id)sender { // 1.创建子线程/* 第1个参数:线程代号 (现场对象) 第2个参数:线程的属性 第3个参数:子线程需要执行的操作(调用的方法) void *(*)(void *) 返回值 (*指针名称)参数

C - pthread多线程最简单示例

#include <pthread.h> #include <stdio.h> /* this function is run by the first thread */ void *inc_x(void *x_void_ptr) {     printf("线程XXXXXXXXXXXXXXXXXXXXXXX开始\n");     /* increment x to 100 */     int *x_ptr = (int *)x_void_ptr;     

GCC --verbose选项, -lpthread 和-pthread的区别

verbose的意思是冗长的,繁杂的.顾名思义,gcc --verbose 的意思就是打印出编译连接时的详细信息. 参考stackoverflow中的文章结合自己机器的信息给出分析(其实也就是翻译了一下..嘿嘿.  原址:http://stackoverflow.com/questions/13440549/gcc-verbose-mode-output-explanation) 首先给出整体信息: [email protected]:~/APUE3/Chapter11$ gcc printid

pthread编译时报错的解决方法

最近在学习POSIX thread编程,今天编译一个程序报如下错误: /tmp/ccXH8mJy.o:在函数‘main’中:deadlock.c:(.text+0xbb):对‘pthread_create’未定义的引用deadlock.c:(.text+0x134):对‘pthread_join’未定义的引用 郁闷,百度了一下,发现在gcc编译的使用应该加上 -pthread 选项 (注意不是 -lpthread) 重新编译,顺利通过,特此纪念