OSG OpenThreads 线程学习(1)

       这些天,经过对OSG OpenThreads代码的学习,在OpenThreads模块中,重点介绍了线程的操作,例如,创建线程、挂起线程、限时挂起线程等。在OpenThreads模块中,有重要的三个类:Mutex类、Condition类、Barrier类、Thread类。

一、Mutex类: 互斥类,这个类提供了一个面向对象的线程互斥对象接口,在代码中,有两种方式实现,内存的互斥访问:(1)使用临界区 USE_CRITICAL_SAECTION (2)使用原子操作。

       1.1. 在使用临界区时,首先需要定义一个临界区变量,并初始化,类实现所有的头文件为: windows.h,  代码所在的文件与类: Win32MutexPrivateData.h   Win32MutexPrivateData  Mutex, Win32Mutex.cpp

                   CRITICAL_SECTION _cs;  InitializeCriticalSection(&_cs);

       进入临界区后,实现对内存的互斥访问,访问完成后,离开临界区  :  实现线程的挂起与运行

                    EnterCriticalSection(&_cs);  tryEnterCriticalSection(&_cs);  LeaveCriticalSection(&_cs);

    tryEnterCriticalSection(&_cs) 返回类型为布尔类型 如果为FALSE:  表示线程已经获取到该临界区,或者早已获取,  如果返回TRUE: 表示另外的线程获已经获取了该临界区变量。

      在程序结束时,需要删除临界区:

                    DeleteCriticalSection(&_cs);

       1.2. 使用原子操作实现内存互斥访问,(线程的运行与挂起);首先定义变量,并初始化,  类实现的头文件: windows.h  代码所在的文件与类: Win32MutexPrivateData.h   Win32MutexPrivateData  Mutex, Win32Mutex.cpp

                 volatile unsigned long mutex;; mutex = 0;

         volatile 就象大家更熟悉的const一样,volatile是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。

       原子操作: 0.1互换操作

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值