C语言之多线程机制(程序可以同时被执行而不会相互干扰)

接触过linux的人或多或少知道,linux有多线程的机制,也就是说程序可以同时执行,不受干扰,关于这个在我以前的博文里有过类似模拟的时间片轮转程序,跟这个其实是类似的。其实在window上,线程的头文件也是可以包含进来使用的,我这里用DevC++这个软件来测试,看看运行效果就知道了,接下来我们简单介绍一下线程接口。

      那么什么是线程呢?

     线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

二、什么时候使用多线程?     当多个任务可以并行执行时,可以为每个任务启动一个线程。
三、线程的创建     使用pthread_create这样一个函数:

int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,
(void*)(*start_rtn)(void*),void *arg);

参数

第一个参数为指向线程标识符指针

第二个参数用来设置线程属性。

第三个参数是线程运行函数的起始地址。

最后一个参数是运行函数的参数。

那接下来我们看看如何来使用吧!!!

很简单,在linux下可以跑这段代码,在window上一样也可以跑,因为这两个接口在两个操作系统被相互兼容。瞬间在window上做开发C语言就很强大了,有木有?当然一下只是创建了一条线程,还可以创建多条进程,不信可以去试试!

#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
//执行线程的一个函数
void *do_thread(void *arg);

int main(void)
{
	//创建线程的id号
	pthread_t    tid ;
	int ret ;
	//创建一条线程
	ret = pthread_create(&tid , NULL , 	do_thread , NULL);
	if(ret != 0)
	{
		fprintf(stderr , "创建线程失败!\n");
		return -1 ;
	}
	//当线程结束时自动释放id号
	ret = pthread_detach(tid);
	while(1)
	{
		printf("Hello world1!\n\n");
		sleep(1);
	}
	return 0 ;
}
void *do_thread(void *arg)
{
	while(1)
	{
		printf("Hello world2!\n\n");
		sleep(1);
	}
}

运行结果:

两个死循环彼此互不干扰?想知道原因吗?请持续关注本博客!

    

时间: 2024-09-02 08:54:30

C语言之多线程机制(程序可以同时被执行而不会相互干扰)的相关文章

c语言-下面两段程序片,其执行效率有区别码?在实际代码中会选用哪一段,为什么?

问题描述 下面两段程序片,其执行效率有区别码?在实际代码中会选用哪一段,为什么? 其实就是在执行两层for循环的循环体中,for循环调换位置是否对效率有影响? 如下: 代码段一: for(row=5;--row>=0;) for(col=100;--col>=0;) sum=sum+a[row][col]; 代码段二: for(col=100;--col>=0;) for(row=5;--row>=0;) sum=sum+a[row][col]; 本人小白,望大神们指教. 解决方案

c语言实现多线程动画程序示例_C 语言

该程序是利用opengl图形库与fmod音频库写的一个简单3d动画程序.该程序在vs下运行良好,若缺少相关dll文件请确认已配制fmod与opengl库. mixmodel.cpp 复制代码 代码如下: // mixmodel.cpp : 定义控制台应用程序的入口点.// #include "stdafx.h" //定义一个线程DWORD WINAPI SoundProc( LPVOID LPVIDEOPARAMETERS);//光照变量GLfloat  whiteLight[] =

C#的多线程机制初探

多线程 注:本文中出现的代码均在.net Framework RC3环境中运行通过 一.多线程的概念 Windows是一个多任务的系统,如果你使用的是windows 2000及其以上版本,你可以通过任务管理器查看当前系统运行的程序和进程.什么是进程呢?当一个程序开始运行时,它就是一个进程,进程所指包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的,线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针.程序计数器等),但代码区是共享的,即不同的线程可以执

C#的多线程机制探索

多线程 C#的多线程机制探索 #多线程程序设计是一个庞大的主题,而本文试图在.net Framework环境下,使用最新的C#语言来描述多线程程序的概貌.希望本文能有助于大家理解线程这种概念,理解多线程的用途,理解它的C#实现方法,理解线程将为我们带来的好处和麻烦.C#是一种新的语言,因此它的线程机制也有许多独特的地方,希望大家能通过本文清楚地看到这些,从而可以对线程进行更深入的理解和探索. ASP.NET Trap: 'Same' Types in different Assemblies a

用Java实现多线程服务器程序

---- 摘要:在Java出现之前,编写多线程程序是一件烦琐且伴随许多不安全因素的事情.利用Java,编写安全高效的多线程程序变得简单,而且利用多线程和Java的网络包我们可以方便的实现多线程服务器程序. ---- Java是伴随Internet的大潮产生的,对网络及多线程具有内在的支持,具有网络时代编程语言的一切特点.从Java的当前应用看,Java主要用于在Internet或局域网上的网络编程,而且将Java作为主流的网络编程语言的趋势愈来愈明显.实际工作中,我们除了使用商品化的服务器软件外

解析Java的多线程机制

一.进程与应用程序的区别 进程(Process)是最初定义在Unix等多用户.多任务操作系统环境下用于表示应用程序在内存环境中基本执行单元的概念.以Unix操作系统为例,进程是Unix操作系统环境中的基本成分.是系统资源分配的基本单位.Unix操作系统中完成的几乎所有用户管理和资源分配等工作都是通过操作系统对应用程序进程的控制来实现的. C.C++.Java等语言编写的源程序经相应的编译器编译成可执行文件后,提交给计算机处理器运行.这时,处在可执行状态中的应用程序称为进程.从用户角度来看,进程是

c语言socket多线程编程限制客户端连接数

      这篇文章主要介绍了c语言socket多线程编程,可以限制客户端连接数,大家参考使用吧      先上一些多线程需要使用的函数定义:     代码如下: DWORD WINAPI ProcessClientRequests(LPVOID lpParam)  //新线程将会执行的函数定义 {       return 0; }   HANDLE handler=CreateThread(NULL, 0, ProcessClientRequests, &clientsocket, 0, N

JAVA多线程机制之同步与互斥

一个多线程的程序,两个或者多个线程可能需要访问同一个数据资源.这时就必须考虑数据安全的问题,需要线程互斥或者同步. 线程的互斥 当多个线程需要访问同一资源时,要求在一个时间段内只能允许一个线程来操作共享资源,操作完毕后别的线程才能读取该资源,这叫线程的互斥.我们需要使用synchronized来给共享区域加锁,确保共享资源安全. 如果一个线程调用了某个对象的synchronized方法,它在这个方法运行完之前不会被别的线程打断,这就是线程的同步机制.一般将共享资源放在这个同步方法内部,这样就保证

在C#中编写多线程应用程序,简单!

程序|多线程 (欢迎访问www.kunwsoft.com) 以前在使用VB来实现多线程的时候,发现有一定的难度.虽然也有这样那样的方法,但都不尽人意,但在C#中,要编写多线程应用程序却相当的简单.这篇文章将作简要的介绍,以起到抛砖引玉的作用! .NET将关于多线程的功能定义在System.Threading名字空间中.因此,要使用多线程,必须先声明引用此名字空间(using System.Threading;). 即使你没有编写多线程应用程序的经验,也可能听说过"启动线程""