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

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

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

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

  

关于内核对象:

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

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

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

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

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

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

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

posted on 2017-11-22 11:00  TcSong24  阅读(819)  评论(0编辑  收藏  举报

导航