首页 >> 网络营销词典 >> 互联网工具及软件 >> c语言 多线程

c语言 多线程[编辑]


概述
一个程序开始运行就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的。

  基本概念

    进程:当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。

    线程:线程是程序中的一个执行流,每个线程都有自己的专有寄存器,但代码区是共享的,即不同的线程可以执行同样的函数。

    多线程:多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

  优势

     提高应用程序响应:对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而如果使用多线程技术,将耗时长的操作置于一个新的线程,就可以避免这种尴尬的情况。

     使多CPU系统更加有效:当线程数不大于CPU数目时,不同的线程就会运行于不同的CPU上。

     改善程序结构:一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序便会利于理解和修改。

  LinuxC多线程介绍

    C语言的开始设计,并未设计多线程的机制,由于随着软硬件的发展及需求的发展。后来C语言才开发了线程库以支持多线程的操作、应用。主要基于Linux介绍C多线程。在编译C多线程时候,一方面必须指定Linux C语言线程库多线程库pthread,才可以正确编译;另一方面要包含有关线程头文件#include。

  线程创建

    函数原型为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类型的指针函数;void *restrict arg start_rtn的形参。

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

   函数原型:int pthread_join( pthread_t thread, void **value_ptr);

  线程退出

    函数原型: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;等待pthread_cond_wait。

  正确处理Linux平台下的线程结束问题

    在Linux平台下,当处理线程结束时需要注意的一个问题就是如何让一个线程完成,让其所占资源得到正确释放。在Linux平台默认情况下,虽然各个线程之间是相互独立的,一个线程的终止不会去通知或影响其他的线程。但是已经终止的线程的资源并不会随着线程的终止而得到释放需要调用pthread_join() 来获得另一个线程的终止状态并且释放该线程所占的资源。

  多线程函数

  c语言在win32控制台下写的多线程函数

#include <windows.h>
#include <iostream.h>
#include "stdio.h
DWORD WINAPI funcProc(
LPVOID lpParameter // thread data
);
int index = 0;
void main()
{
HANDLE hThred1;
hThred1 = CreateThread(NULL,0,funcProc,NULL,0,NULL);
CloseHandle(hThred1);
while(index ++ < 1000)
cout<<"main thread is running"<<endl;
// Sleep(1);
}
DWORD WINAPI funcProc(
LPVOID lpParameter // thread data
)
{
while(index ++ < 1000)
cout<<"thread1 is running"<<endl;
return 0;
}

 

   Linux 下多线程函数

#include<stdio.h>
#include<pthread.h>

void Senny(void)
{
int i;
for(i=0;i<10;i++)
printf("This is Senny:%d\n",i);
}

int main()
{
pthread_t thread_id;
int k,ret;
ret=pthread_create(&thread_id,NULL,(void*)Senny,NULL);
if(ret!=0)
{
printf("Create thread fail!");
exit(1);
}
for(k=0;k<10;k++)
{
printf("This is main process!\n");
}
pthread_join(thread_id,NULL);
return 0;
}

参考资料: 百度百科
扩展阅读:
相关词条:
合作编辑:

网络营销词典内容均由网友提供,仅供参考。如发现词条内容有问题,请发邮件至info # wm23.com。

词条信息

浏览次数:12

编辑次数:1历史版本

创建者: 王会君

最近更新:2015/11/12 14:03:16

词条分类导航

关于网络营销教学网站| 本站动态| 网站地图| 版权声明| 联系作者| 问题和建议|

版权声明:网络营销教学网站所有作品版权均归原作者所有,未经书面许可,严禁任何形式的转载/转贴、出版、篡改、汇编、编译等。