zoukankan      html  css  js  c++  java
  • 写了一阵子多线程之后需要注意的几点

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

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

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

      

    关于内核对象:

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

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

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

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

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

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

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

  • 相关阅读:
    java去掉List中的重复值代码
    jquery 请求jsp传递json数据的方法
    jsp自定义标签分析
    jquery mouseout事件冒泡解决方法
    java split函数 对空的处理
    log4j使用感受
    mysql数据库主外键级联删除脚本RESTRICT --> CASCADE
    jquery 实现层级下拉框联动效果 代码
    JSP图片上传 公共工具类
    Apache和Nginx的对比
  • 原文地址:https://www.cnblogs.com/tcsong24/p/7878194.html
Copyright © 2011-2022 走看看