永发信息网

C语言编的程序如何实现多线程运行?

答案:3  悬赏:10  手机版
解决时间 2021-05-04 07:39
C语言编的程序如何实现多线程运行?
最佳答案
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.
全部回答
CreateThreadEx应为CreateRemoteThread
Windows下可以用CreateThread创建线程,可以用CreateThreadEx在其它进程中创建线程。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
现在的天气为什么这么热
地下城外挂是什么?
爱悠便利店这个地址在什么地方,我要处理点事
打印机是输出设备吗,绘图仪是输入设备还是输
为什么今年过完年后中国,天灾,人祸频发??
模拟人生3下载.
PSP30006.20怎样运行GBA,FC模拟器?
怎么开通QQ
青海宏亮电子设备有限公司这个地址在什么地方
最近有什么好看的电影或电视
初二英语的祈使句句子,祈使句的定义和结构
我的QQ表情栏怎么成这样了?怎么跑到下面一层
WOW中这个插件怎么弄掉啊(见图)
7个月的宝宝应该吃些什么?除了蛋黄!
我前一个星期办了电信天翼卡,现在想停机怎么
推荐资讯
qq会员都可办什么
为什么大话西游2经久不衰?
本人今年想考南开的周政学院,寻找一位在校的
“说不难过是假的,故作坚强应付选择”翻译成
与睡觉有关的优美句子,有关睡觉的名句
求武当86神器万仞龙渊剑镶嵌视觉图
爱情与亲情,那个重要
超级QQ设置了全天在线对好友隐身怎么没用
、、、、、、、
有钱可买爱情吗?
麻烦帮用中文翻译一下:take care mysolf ple
怎么快速改房名
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?