`

pthread_create实例

 
阅读更多

pthread_create在调用成功后会返回0,否则返回一个非0值,用strerror函数可以看到错误信息。

创建5个缺省线程(即具有缺省属性的线程),打印出线程创建的序号,所在进程的id以及线程id。

main.cpp

#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
#include <sys/types.h>
#include <string.h>
#include <stdlib.h>
void* st_routine(void* args){
	pid_t pid = getpid();
	pthread_t thread_id = pthread_self();
	printf("%s process id is %u; thread id is %u\n", (char*)args, (unsigned int)pid, (unsigned int)thread_id);
	return ((void*)0);
}
int main(){
	//sprintf((char*)str, "serial number is %d", 0);
	//printf("%s\n", (char*)str);
	const int n = 5; 
	pthread_t pids[n]; 		
	void* str[n];
	int err;
	for(int i = 0; i < n; i++){
		str[i] = malloc(32);
		sprintf((char*)str[i], "serial number is %d", i);
		if((err = pthread_create(pids+i, NULL, st_routine, str[i])) != 0){
			fprintf(stderr, "fail to create %dth thread, error msg:%s\n", i, strerror(err));	
		}
	}
	//需要让主线成睡眠一下,否则退出太快,pthread_create创建的线程会被
	//极早中断
	sleep(1); 
	return 0; 
}

 在终端执行如下命令即可看到效果。

g++ -pthread -o main main.cpp && ./main

 

一组输出如下:

 

serial number is 4 process id is 13202; thread id is 3042868032
serial number is 3 process id is 13202; thread id is 3051260736
serial number is 2 process id is 13202; thread id is 3059653440
serial number is 1 process id is 13202; thread id is 3068046144
serial number is 0 process id is 13202; thread id is 3076438848
 

 

分享到:
评论

相关推荐

    QT中多线程

    QT中多线程实例,使用C的pthread_create,传递参数,简单易懂,用工程和可执行程序及源代码,仅供参考

    C++线程池的简单实现方法

    int pthread_create(pthread_t *tidp, const pthread_attr_t *attr, (void*)(*start_rtn)(void *), void *arg); //创建 void pthread_exit(void *retval); //终止自身 int pthread_cancel(pthread_t tid); //终止...

    Linux线程同步之信号C语言实例

    linux中向某个线程发送信号,若没有对该信号的处理函数,则会导致程序结束。 如下面的程序,创建一个线程,主线... pthread_create(&t, 0, run, 0); pthread_kill(t,34); while(1); } 这就要求利用pthread_kill 与

    Android中实现开机自动启动服务(service)实例

    最近在将 HevSocks5Client 移植到 Android 上了,在经过增加...Java 中调用 native 程序我选择使用 JNI 方式,直接在 JNI_OnLoad 方法中调用 pthread_create 创建个线程跑原来的 main 就行啦。 代码如下:…#if defined

    linux网络编程-宋敬彬-part2

    4.4.2 Linux下线程创建函数pthread_create() 129 4.4.3 线程的结束函数pthread_join()和pthread_exit() 129 4.4.4 线程的属性 130 4.4.5 线程间的互斥 132 4.4.6 线程中使用信号量 133 4.5 小结 136 第2...

    linux网络编程-宋敬彬-part3

    4.4.2 Linux下线程创建函数pthread_create() 129 4.4.3 线程的结束函数pthread_join()和pthread_exit() 129 4.4.4 线程的属性 130 4.4.5 线程间的互斥 132 4.4.6 线程中使用信号量 133 4.5 小结 136 第2...

    linux网络编程-宋敬彬-part1

    4.4.2 Linux下线程创建函数pthread_create() 129 4.4.3 线程的结束函数pthread_join()和pthread_exit() 129 4.4.4 线程的属性 130 4.4.5 线程间的互斥 132 4.4.6 线程中使用信号量 133 4.5 小结 136 第2...

    gsoap 2.8 (SOAP/XML 关于C/C++ 语言的自动化实现工具内附 CSharp webservice例子,及GSOAP client和server例子)

     pthread_create(&tid, NULL, (void*(*)(void*))soap_serve, (void*)&soap1);  ...  soap_init(&soap2);  soap_call_ns__method(&soap2, ...); // 调用远程方法  ...  soap_end(&soap2);  ...  pthread_join...

    Linux中多线程详解及简单实例

    Linux中多线程详解及简单实例 1.概念 进程:运行中的程序。 线程:一个程序中的多个执行路径。更准确的定义是:线程是一个进程内部的一个控制序列。 2.为什么要有线程? 用fork调用进程代价太高,需要让一个...

    static 用法

    static关键字是C, C++中都存在的关键字, 它主要有三...另外, 在设计类的多线程操作时, 由于POSIX库下的线程函数pthread_create()要求是全局的, 普通成员函数无法直接做为线程函数, 可以考虑用Static成员函数做线程函数

    MFC的程序框架剖析

    一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。...

    php使用pthreads v3多线程实现抓取新浪新闻信息操作示例

    CREATE TABLE `tb_sina` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `url` varchar(256) DEFAULT '' COMMENT 'url地址', `title` varchar(128) DEFAULT '' COMMENT '标题', `time` datetim

    linux网路编程 中文 23M 版

    第1 章Linux操作系统概述................... .......................................................................... 2 1.1 Linux发展历史...........................................................

Global site tag (gtag.js) - Google Analytics