• 写了一阵子多线程之后需要注意的几点


      在要给线程设置亲和性时,在创建线程之后要将线程挂起,否则线程会立即运行。

      多线程环境中对一个变量进行读写时,需要有一种方法能够保证对一个值的递增操作是原子操作——即不可打断性,一个线程在执行原子操作时,其它线程必须等待它完成之后才能开始执行该原子操作。

      在windows API中,WaitForMultipleObjects()最多只能等待64个线程。

      

    关于内核对象:

      每个内核对象只是内核分配的一块内存,并且只能由该内核访问。该内存块是一种数据结构,它的成员负责维护该对象的各种信息。有些数据成员(如安全描述符、使用计数等)在所有对象类型中是相同的,但绝大多数数据成员属于特定的对象类型。

      内核对象的存在时间可以比创建该对象的进程长。

      内核对象能够得到安全性描述符的保护。安全描述符用于描述谁创建了该对象,谁能够访问或使用该对象,谁无权访问该对象。安全描述符通常在编写服务器应用程序时使用,如果你编写客户机的应用程序,那么可以忽略内核对象的这个特性。

      每个线程必须用欧一个进入点函数,线程从这个进入点开始运行。主线程的进入点函数:即main、wmain、WinMain或wWinMain。

      如果线程能够返回,就可以确保以下事项的实现:在线程函数中创建的所有C++对象均将通过它们的撤销函数正确地撤销。操作系统将正确地释放线程堆栈使用的内存。系统将线程的退出代码设置为线程函数的返回值。系统将递减线程内核对象的使用计数。

      关键段(Critical Section)是一小段代码,它执行之前需要独占对一些共享资源的访问权。这种访问方式可以让多行代码以“原子方式”对资源进行操控。这里的原子方式,指的是代码知道除了当前线程之外,没有其他任何线程会同时访问该资源。当然,系统仍然可以暂停当前线程去调度其他线程。但是,当前线程离开关键段之前,系统时不会去调度任何想要访问同一资源的其它线程的。

      设置进程的优先级再设置线程的优先级。通过将线程的相对优先级与线程的进程优先级综合起来考虑,系统就可以确定线程的优先等级。

  • 相关阅读:
    删除链表的倒数第N个节点
    SVN快速入门(TSVN)
    C# HttpWebRequest提交数据方式浅析
    简单的3个SQL视图搞定所有SqlServer数据库字典
    简单统计SQLSERVER用户数据表大小(包括记录总数和空间占用情况)
    详细讲解Android对自己的应用代码进行混淆加密防止反编译
    PHP之网络编程
    PHP之ThinkPHP模板标签操作
    PHP之ThinkPHP数据操作CURD
    关于数组的取极值和排序
  • 原文地址:https://www.cnblogs.com/tcsong24/p/7878194.html
Copyright © 2020-2023  润新知