C和Win32的多线程编程(MSDN笔记整理)

本文介绍了C和Win32环境下如何进行多线程编程,探讨了线程间的资源同步,如互斥体的使用,并详细阐述了_beginthread和_endthread系列函数的功能和区别,提供了多线程示例程序Bounce.c。
摘要由CSDN通过智能技术生成

线程之间需要共享公共资源,还要接收各自的堆栈。

1. 所有线程使用的公共资源必须同步,Win32 提供了几种同步资源的方式,包括信号、临界区、事件和互斥体。

互斥体(mutual exclusion 的缩写)是异步执行的线程或进程间通信的方式。此通信通常用于协调多个线程或进程的活动,通常通过锁定和取消锁定资源控制对共享资源的访问。假定有这样一个程序,一个线程更新静态数据结构,该结构包含要由其他线程显示的项的 x,y 坐标。为解决此 x,y 坐标的更新问题,更新线程将设置 mutex,在执行更新之前指示数据结构正在使用。更新线程将在两个坐标全部处理完之后清除互斥体。显示线程在更新显示之前必须等待清除互斥体。由于进程被阻止且直到清除 mutex 后才能继续,因此等待 mutex 的进程通常称为在 mutex 上“阻止”。也就是当一个线程在处理公共资源时设置一个互斥体,再结束处理后清除它。

需要小心管理的资源只有屏幕显示和静态数据两种。

//多线程的文件处理
HANDLE    hIOMutex= CreateMutex (NULL, FALSE, NULL); //设置互斥体句柄

WaitForSingleObject( hIOMutex, INFINITE );//使用常数INFINITE,表示线程在互斥体上阻止,但不能等待超时
fseek( fp, desired_position, 0L );//文件指针重新设置
fwrite( data, sizeof( data ), 1, fp );
ReleaseMutex( hIOMutex);//释放互斥体把资源让给其他线程使用

2. 程序各自的堆栈

应用程序的所有默认堆栈空间都被分配到称为线程 1 的第一个执行线程。因此,必须为程序所需的每个附加线程的单独堆栈指定分配的内存量。如果必要,操作系统将为线程分配附加的堆栈空间,但必须指定默认值。


例子(from msdn):Bounce.c 是一个示例多线程程序,每次键入字母 a 或 A

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值