C语言编的程序如何实现多线程运行?
答案:3 悬赏:10 手机版
解决时间 2021-05-04 07:39
- 提问者网友:献世佛
- 2021-05-04 02:04
C语言编的程序如何实现多线程运行?
最佳答案
- 五星知识达人网友:woshuo
- 2021-05-04 02:21
linux—C语言线程库
pthread
在编译C的多线程时候,必须指定多线程库,才可以正确编译。
例如gcc test.c -o test -lpthread
有关线程头文件
#include <pthread.h>
线程操作
线程创建
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的行参
线程挂起
int pthread_join( pthread_t thread, void **value_ptr);
参数说明如下:
thread 等待退出线程的线程号
value_ptr 退出线程的返回值。
该函数的作用使得当前线程挂起,等待另一个线程返回才继续执行。也就是说当程序运行到这个地方时,程序会先停止,然后等线程id为thread的这个线程返回,然后程序才会断续执行。
线程退出
void pthread_exit(void *rval_ptr);
获取当前线程id
pthread_t pthread_self(void);
互斥锁
创建 pthread_mutex_init
销毁 pthread_mutex_destroy
加锁 pthread_mutex_lock
解锁 pthread_mutex_unlock
条件锁子
创建 pthread_cond_init
销毁 pthread_cond_destroy
触发 pthread_cond_signal
广播 pthread_cond_broadcast S
等待 pthread_cond_wait
正确处理 Linux 平台下的线程结束问题
在 Linux 平台下,当处理线程结束时需要注意的一个问题就是如何让一个线程善始善终,让其所占资源得到正确释放。在 Linux 平台默认情况下,虽然各个线程之间是相互独立的,一个线程的终止不会去通知或影响其他的线程。但是已经终止的线程的资源并不会随着线程的终止而得到释放,我们需要调用 pthread_join() 来获得另一个线程的终止状态并且释放该线程所占的资源。
多线程优势
线程程序作为一种多任务、并发的工作方式,当然有以下的优点:
1) 提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(time consuming)置于一个新的线程,可以避免这种尴尬的情况。
2) 使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。
3) 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。
例程
面我们展示一个最简单的多线程程序example.c。
#include <stdio.h>
#include <pthread.h>
void thread(void)
{
int i;
for(i=0;i<3;i++)
printf("This is a pthread.\n");
}
int main(void)
{
pthread_t id;
int i,ret;
ret=pthread_create(&id,NULL,(void *) thread,NULL);
if(ret!=0){
printf ("Create pthread error!\n");
exit (1);
}
for(i=0;i<3;i++)
printf("This is the main process.\n");
pthread_join(id,NULL);
return (0);
}
我们编译此程序:
gcc example1.c -lpthread -o example1
运行example1,我们得到如下结果(结果有多样性,根据具体系统的调用算法不同而不同):
This is the main process.
This is a pthread.
This is the main process.
This is the main process.
This is a pthread.
This is a pthread.
pthread
在编译C的多线程时候,必须指定多线程库,才可以正确编译。
例如gcc test.c -o test -lpthread
有关线程头文件
#include <pthread.h>
线程操作
线程创建
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的行参
线程挂起
int pthread_join( pthread_t thread, void **value_ptr);
参数说明如下:
thread 等待退出线程的线程号
value_ptr 退出线程的返回值。
该函数的作用使得当前线程挂起,等待另一个线程返回才继续执行。也就是说当程序运行到这个地方时,程序会先停止,然后等线程id为thread的这个线程返回,然后程序才会断续执行。
线程退出
void pthread_exit(void *rval_ptr);
获取当前线程id
pthread_t pthread_self(void);
互斥锁
创建 pthread_mutex_init
销毁 pthread_mutex_destroy
加锁 pthread_mutex_lock
解锁 pthread_mutex_unlock
条件锁子
创建 pthread_cond_init
销毁 pthread_cond_destroy
触发 pthread_cond_signal
广播 pthread_cond_broadcast S
等待 pthread_cond_wait
正确处理 Linux 平台下的线程结束问题
在 Linux 平台下,当处理线程结束时需要注意的一个问题就是如何让一个线程善始善终,让其所占资源得到正确释放。在 Linux 平台默认情况下,虽然各个线程之间是相互独立的,一个线程的终止不会去通知或影响其他的线程。但是已经终止的线程的资源并不会随着线程的终止而得到释放,我们需要调用 pthread_join() 来获得另一个线程的终止状态并且释放该线程所占的资源。
多线程优势
线程程序作为一种多任务、并发的工作方式,当然有以下的优点:
1) 提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(time consuming)置于一个新的线程,可以避免这种尴尬的情况。
2) 使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。
3) 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。
例程
面我们展示一个最简单的多线程程序example.c。
#include <stdio.h>
#include <pthread.h>
void thread(void)
{
int i;
for(i=0;i<3;i++)
printf("This is a pthread.\n");
}
int main(void)
{
pthread_t id;
int i,ret;
ret=pthread_create(&id,NULL,(void *) thread,NULL);
if(ret!=0){
printf ("Create pthread error!\n");
exit (1);
}
for(i=0;i<3;i++)
printf("This is the main process.\n");
pthread_join(id,NULL);
return (0);
}
我们编译此程序:
gcc example1.c -lpthread -o example1
运行example1,我们得到如下结果(结果有多样性,根据具体系统的调用算法不同而不同):
This is the main process.
This is a pthread.
This is the main process.
This is the main process.
This is a pthread.
This is a pthread.
全部回答
- 1楼网友:神也偏爱
- 2021-05-04 03:43
CreateThreadEx应为CreateRemoteThread
- 2楼网友:拜訪者
- 2021-05-04 02:42
Windows下可以用CreateThread创建线程,可以用CreateThreadEx在其它进程中创建线程。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯