`
sunguanxing
  • 浏览: 1083875 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Linux和Windows系统线程间的区别

阅读更多

[摘要] 熟悉WIN32编程的人一定知道,WIN32的进程管理方式与Linux上有着很大区别,在UNIX里,只有进程的概念,但在WIN32里却还有一个"线程"的概念,那么Linux和WIN32在这里究竟有着什么区别呢?
[关键字] Linux Windows 系统线程   熟悉WIN32编程的人一定知道,WIN32的进程管理方式与Linux上有着很大区别,在UNIX里,只有进程的概念,但在WIN32里却还有一个"线程"的概念,那么Linux和WIN32在这里究竟有着什么区别呢?

  WIN32里的进程/线程是继承自OS/2的。在WIN32里,"进程"是指一个程序,而"线程"是一个"进程"里的一个执行"线索"。从核心上讲, WIN32的多进程与Linux并无多大的区别,在WIN32里的线程才相当于Linux的进程,是一个实际正在执行的代码。但是,WIN32里同一个进程里各个线程之间是共享数据段的。这才是与Linux的进程最大的不同。

  下面这段程序显示了WIN32下一个进程如何启动一个线程。

  int g;

  DWORD WINAPI ChildProcess( LPVOID lpParameter ){

  int i;

  for ( i = 1; i <1000; i ++) {

  g ++;

  printf( "This is Child Thread: %d\n", g );

  }

  ExitThread( 0 );

  };

  void main()

  {

  int threadID;

  int i;

  g = 0;

  CreateThread( NULL, 0, ChildProcess, NULL, 0, &threadID );

  for ( i = 1; i <1000; i ++) {

  g ++;

  printf( "This is Parent Thread: %d\n", g );

  }

  }

  在WIN32下,使用CreateThread函数创建线程,与Linux下创建进程不同,WIN32线程不是从创建处开始运行的,而是由 CreateThread指定一个函数,线程就从那个函数处开始运行。此程序同前面的UNIX程序一样,由两个线程各打印1000条信息。 threadID是子线程的线程号,另外,全局变量g是子线程与父线程共享的,这就是与Linux最大的不同之处。大家可以看出,WIN32的进程/线程要比Linux复杂,在Linux要实现类似WIN32的线程并不难,只要fork以后,让子进程调用ThreadProc函数,并且为全局变量开设共享数据区就行了,但在WIN32下就无法实现类似fork的功能了。所以现在WIN32下的C语言编译器所提供的库函数虽然已经能兼容大多数Linux/UNIX的库函数,但却仍无法实现fork。

  对于多任务系统,共享数据区是必要的,但也是一个容易引起混乱的问题,在WIN32下,一个程序员很容易忘记线程之间的数据是共享的这一情况,一个线程修改过一个变量后,另一个线程却又修改了它,结果引起程序出问题。但在Linux下,由于变量本来并不共享,而由程序员来显式地指定要共享的数据,使程序变得更清晰与安全。

  至于WIN32的"进程"概念,其含义则是"应用程序",也就是相当于UNIX下的exec了
分享到:
评论

相关推荐

    Linux多线程 C语言编程关于多线程

    csdn Linux 下的多进程编程初步 摘要:多线程程序设计的概念早在六十年代就被提出,但直到八十年代中期,Unix 系 ...和早期的Windows 不同,Unix/Linux 系统是真正实现多任务操作的系统,可以说,不使. . . ./ .

    操作系统。。windows多线程

    利用XP操作系统做的windows多线程利用XP操作系统做的windows多线程利用XP操作系统做的windows多线程

    线程创建的封装 Windows,Linux

    线程的 创建 回收 windows linux系统都可使用

    Swoole Loader Linux64位(非线程安全) 、Windows64位(非线程安全)扩展

    包括:Linux64位(非线程安全) swoole_loader56.so、swoole_loader70.so、swoole_loader71.so、swoole_loader72.so、swoole_loader73.so、swoole_loader74.so。 Linux64位(线程安全) swoole_loader56_zts.so、swoole_...

    Linux系统设计-DOS批处理、Linux系统、Windows系统

    Linux系统是一个免费使用和自由传播的类Unix操作系统,基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统,Linux是许多企业...

    linux多线程编程入门

    现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。  为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么的系统应该选用多线程?我们首先必须回答这些问题。

    让Linux像Windows一样方便

    安装、各类网络配置、文字处理软件WPS的安装、查看Windows的FAT和NTFS格式分区、U盘和移动硬盘的使用、CVS的配置、与Windows网络互通(Samba的配置)、多媒体软件(Realplayer、Mplayer、XMMS、BMP)的安装配置、网络...

    linux操作系统大全

    我精心收集的十分详细的linux教程! linux操作系统分析 1.linux简介 2.常用命令 3.网络功能 4.系统管理 5.外壳编程 6.gawk语言编程 7.perl语言编程 8.linux内核简介 ...13.中断和中断处理 ...29.定制X WINDOWS系统

    Win丨linux丨操作系统实验二:生产者——消费者问题

    操作系统实验二:生产者——消费者问题 ...3. 两种环境下,生产者和消费者均作为独立线程,并通过empty、full、mutex三个信号量实现对缓冲进行插入与删除。 4. 通过打印缓冲区中的内容至屏幕,来验证应用程序的正确性。

    LINUX多线程

    线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。...现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。

    linux多线程详解说明

    现在,多线程技术已经被许多操作系统所支 持,包括Windows也包括Linux。 为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么的系统应该选用多线程?我们首先必须回答这些问题。 使用多线程...

    Linux系统设计-WebFile 用go语言开发的浏览器文件管理系统,支持windows,linux,MacOS

    Linux系统是一个免费使用和自由传播的类Unix操作系统,基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统,Linux是许多企业...

    Linux系统设计-根据固定的excel模板,动态创建mysql数据库,支持windows系统和linux系统

    Linux系统是一个免费使用和自由传播的类Unix操作系统,基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统,Linux是许多企业...

    Linux系统设计-加密解密工具箱GUI程序,支持Windows和linux系统

    Linux系统是一个免费使用和自由传播的类Unix操作系统,基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统,Linux是许多企业...

    操作系统实验二:进程与线程

    1. 在windows 下编写一个控制台应用...在windows 环境下编写一个控制台应用程序,输出系统中正在运行的进程的信息,包括进程号、进程所运行的程序、进程的启动时间、在核心态下消耗的时间以及在用户态下消耗的时间。

    Linux系统设计-野火IM PC 客户端,支持Windows、MacOS,Linux,支持国产操作系统和国产CPU

    Linux系统是一个免费使用和自由传播的类Unix操作系统,基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统,Linux是许多企业...

    在C++中使用openmp进行多线程编程

    11开始支持的std::thread,也可以使用操作系统相关的线程API,如在Linux上,可以使用pthread库。除此之外,还可以使用omp来使用多线程。它的好处是跨平台,使用简单。 在Linux平台上,如果需要使用omp,只需在编译时...

    Linux系统设计-将Java程序部署成系统服务的工具源码,支持windows 、Linux 等多种操作系统

    Linux系统是一个免费使用和自由传播的类Unix操作系统,基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统,Linux是许多企业...

    Linux系统下的多线程编程入门

    线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期, solaris是这方面的佼佼者。...现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。

    Linux系统设计-sqlmap4burp++是一款兼容Windows,mac,linux多个系统平台的联动插件

    Linux系统是一个免费使用和自由传播的类Unix操作系统,基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统,Linux是许多企业...

Global site tag (gtag.js) - Google Analytics