线程编程常见API简介(上)
?
一、概述
? ? ? 本文主要讲述了 Posix 标准的常用线程 API 接口的使用,目前 Linux/Unix 均提供了遵循 Posix 标准的线程编程 API,微软提供了自己的一套接口,acl ?线程模块库根据 Posix 标准,提供了跨平台(支持 LINUX/WIN32)的线程库,接口定义及参数含义均与 Posix 的相同。如果您对 Linux 下的线程 API 比较熟悉,则当需要移植您的程序至 WIN32 平台时,只要需要在所用线程 API 前加前缀 acl_,同时将 acl 的 lib_acl.a 及相应头文件集成到您的程序中,即可将 LINUX 下线程程序移植至 WIN32 平台。
?
二、常用API 介绍
1)创建线程 API:pthread_create,在 acl 库中的表现形式:acl_pthread_create
#include <pthread.h>#include <stdlib.h>#include <stdio.h>#include <errno.h>#include <string.h>static void *mythread_main(void *arg){char *ptr = (char*) arg;printf("my thread id: %ld\r\n", pthread_self());printf("arg: %s\r\n", ptr);free(ptr); /* 释放在父线程中分配的内存 */ptr = strdup("thread exit ok");return ptr;}int main(void){char *name = strdup("thread_test");pthread_t tid;pthread_attr_t attr;/* 初始化线程属性对象 */if (pthread_attr_init(&attr) != 0) { /* 此处出错应该是内存资源不够所至 */printf("pthread_attr_init error: %s\r\n", strerror(errno));return 1;}/* 设定子线程的堆栈空间为 4MB */if (pthread_attr_setstacksize(&attr, 4096000) != 0) {printf("pthread_attr_setstacksize error: %s\r\n", strerror(errno));pthread_attr_destroy(&attr); /* 必须释放线程属性资源 */return 1;}/* 创建子线程 */if (pthread_create(&tid, mythread_main, name) != 0) {printf("pthread_create error: %s\r\n", strerror(errno));pthread_attr_destroy(&attr); /* 必须释放线程属性资源 */return 1;}printf("ok, create thread id: %ld\r\n", tid);/* 接管子线程的退出状态 */if (pthread_join(&tid, &ptr) != 0) {printf("pthread_join error: %s\r\n", strerror(errno));pthread_attr_destroy(&attr); /* 必须释放线程属性资源 */return 1;}printf("child thread exit: %s\r\n", ptr);free(ptr); /* 释放在子线程分配的内存 */pthread_attr_destroy(&attr); /* 释放线程属性资源 */return 0;}? ? ? 上述例子中,只需把 pthread_ 前添加前缀 acl_,同时包含头文件 #include "lib_acl.h",该例子便可以在 WIN32 平台下运行了。
? ? ? 本节暂且说这一些有关线程编程时用到的 API,下一节继续。
本文地址
acl 库下载:https://sourceforge.net/projects/acl/