Linux c 多线程写日志,linux c/c++多线程程序的编写(转)

第一次尝试编写linux下多线程程序,也是颇废一番周折。深知初学者对能快速的成功运行一段程序的渴望,所以本文专门用了“linux

c/c++多线程程序的编写“这个醒目的标题,方便大家能即使从搜索引擎搜到本文,从而提升大家的信心。

首先先让代码进行起来再说为什么,见了效果再回过来头来看原因似乎会容易明白和理解一些。

测试代码如下:

#include[stdio.h]

#include[unistd.h]

#include[stdlib.h]

#include[pthread.h]

#include[string.h]

void *thread_function(void* arg);

char message[] = "Hello world!";

int main() {

int res;

pthread_t a_thread;

void *thread_result;

res = pthread_create(&a_thread, NULL, thread_function, (void*)message);

if (0 != res) {

perror("Thread creation faied");

exit(EXIT_FAILURE);

}

printf("Waiting for thread to finish...\n");

res = pthread_join(a_thread, &thread_result);

if (0 != res) {

perror("Thread join failed");

exit(EXIT_FAILURE);

}

printf("Thread joined, it returned %s\n", (char*)thread_result);

printf("Message is now %s\n",message);

exit(EXIT_FAILURE);

}

void *thread_function(void* arg) {

printf("thread_function is running. argument was %s\n",(char*)arg);

sleep(3);

strcpy(message,"bye!");

pthread_exit("Thank you for the cpu time");

}

请将包含头文件的[替换成<

,]替换成>,代码高亮插件会认为尖括号是html标签,所以这里用中括号暂时替代。

编译:

hqlong@ubuntu:~/code/c$ gcc test.c -o test -lpthread

运行

hqlong@ubuntu:~/code/c$ ./test

结果

thread_function is running. argument was Hello world!

Waiting for thread to finish...

Thread joined, it returned Thank you for the cpu time

Message is now bye!

创建进程主要是通过pthread_create()这个函数来创建,函数的定义如下:

int pthread_create

(

pthread_t *restrict tidp,

const pthread_attr_t *restrict attr,

void *(*start_rtn)(void),

void *restrict arg

);

返回值:若是成功建立线程返回0,否则返回错误的编号

形式参数:

pthread_t *restrict tidp 要创建的线程的线程id指针

const pthread_attr_t *restrict attr 创建线程时的线程属性

void* (start_rtn)(void) 返回值是void类型的指针函数

vodi *restrict arg start_rtn的行参

注意上面还用到了pthread_join()这个函数,那么这个函数有什么用呢?接下来还是先看看它的原形定义:

int pthread_join

(

pthread_t thread,

void **value_ptr

);

各参数说明如下:

thread 等待退出线程的线程号

value_ptr 退出线程的返回值。

该函数的作用使得当前进程挂起,等待另一个进程返回才继续执行。也就是说当程序运行到这个地方时,程序会先停止,然后等线程id为thread的这个线程返回,然后程序才会断续执行。

在上面的例子中,如果把

res = pthread_join(a_thread, &thread_result);

if (0 != res) {

perror("Thread join failed");

exit(EXIT_FAILURE);

}

printf("Thread joined, it returned %s\n", (char*)thread_result);

注释掉,那么主程序根据不会等待线程返回,就退出,当然主进行退出了,他所创建的子进程也就会跟着退出,所以在上面的例子中,程序还在睡眠时,就被主进程强行退出了。

在上面例子进对源码进行编译时,加了-lpthread,如果不加-lprhead,会出现如下编译错误。

tmp/ccnPVTWo.o: In function `main':

mthread.c:(.text+0x30): undefined reference to `pthread_create'

mthread.c:(.text+0x6f): undefined reference to `pthread_join'

collect2: ld returned 1 exit status

thread

库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux下的多线程编程可以使用C/C++语言实现。C/C++语言提供了一些多线程编程的库,如pthread库、OpenMP库、Boost库等。其中,pthread库是Linux下最常用的多线程编程库,它提供了一系列的API函数,可以用来创建、管理和同步线程。在C/C++语言中,可以使用pthread_create()函数创建线程,使用pthread_join()函数等待线程结束,使用pthread_mutex_lock()和pthread_mutex_unlock()函数实现线程间的互斥访问等。同时,C++11标准也提供了一些多线程编程的支持,如std::thread类、std::mutex类等,可以方便地实现多线程编程。 ### 回答2: Linux下的多线程编程是指在Linux系统下使用多个线程来执行不同的任务,从而提高程序的运行效率和响应速度。 C/C++Linux下最常用的编程语言之一,也是多线程编程的主要语言。实现多线程编程可以使用线程库,其中最常用的是pthread库。 Pthread库是Linux下的开放式多线程库,它允许程序员使用标准的POSIX线程接口来创建、终止、同步和管理线程。使用Pthread库可以很方便地进行多线程编程,其中主要包括以下几个方面。 1. 创建和启动线程:使用pthread_create函数来创建和启动线程,该函数需要传递线程ID、线程属性和线程函数等参数。 2. 同步线程:使用pthread_join函数来等待一个线程结束,以便获取线程的返回值。使用pthread_mutex和pthread_cond等函数来进行线程同步。 3. 线程控制:使用pthread_cancel函数来取消线程,使用pthread_exit函数来终止线程。 4. 共享变量:在多个线程之间共享变量时,需要使用pthread_mutex和pthread_cond等函数来控制并发访问。 在进行多线程编程时,需要注意一些问题,如线程安全、死锁等问题。不同的线程对共享资源的读需要使用同步机制,避免竞争和冲突。此外,要注意避免死锁,即多个线程互相等待对方释放资源,造成程序无法正常运行。 总之,Linux下的多线程编程是一项非常重要的技术,在实际开发中应用广泛。使用C/C++编写多线程程序,需要熟悉线程库的使用方法,掌握线程的创建、同步、控制和共享等技术,以保证程序的稳定性和运行效率。 ### 回答3: Linux是一种开源的操作系统,其多线程编程能力是其强大之处之一。当我们需要编写一个高性能、高并发的程序时,多线程编程无疑会是一个很好的选择。 在Linux下,C/C++是最常用的编程语言之一,也是多线程编程的重要语言之一。在C/C++编写多线程程序主要依赖于pthread库。pthread库提供了一套多线程API,可以很方便的创建和管理线程。 使用pthread库创建线程需要以下步骤: 1. 包含pthread库头文件: #include <pthread.h> 2. 定义线程函数: void *thread_func(void *arg){ //线程执行的代码 } 3. 创建线程: pthread_t tid; pthread_create(&tid, NULL, thread_func, NULL); 4. 等待线程结束: pthread_join(tid, NULL); 以上代码片段就创建了一个新线程,并在新线程中执行了thread_func函数。pthread_create函数的第一个参数为线程ID,第二个参数为线程属性,一般使用NULL,第三个参数为线程函数,第四个参数为线程函数的参数。 多线程编程需要注意以下几点: 1. 线程安全:多个线程同时操作同一个共享资源,需要确保操作的正确性和安全性。 2. 线程同步:使用锁、互斥量等机制保证线程之间的同步。 3. 线程调度:多个线程之间需要进行调度,需要注意线程优先级的设置。 总之,在Linux下使用C/C++进行多线程编程是一项非常有用的技能。在实际开发中,需要结合具体的场景和需求,通过选择合适的多线程编程模型、算法和数据结构来实现高效、高性能的程序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值