while(pThread->Resume() != 1) // 没有 Resume !!!!

解决方案 »

  1.   

    3:线程使用完以后,怎么结束掉
    return出线程,线程就结束了锁和同步是不同的概念,锁是保持同步的一种方法
    如果多个线程访问同一个资源,要保持同步,否则,可能会崩溃,也可能会访问到脏数据
      

  2.   

    1.是挂起。
    2.如果你担心的话,可以自己封装一个线程类,线程的挂起和恢复都自己控制,添加个变量,挂起+1,恢复-1之类的。
    3.暴力退出法是TerminateThread,温柔法是想办法通知线程你现在在退出了,然后等待线程执行完退出。
    4.只读不写不用加锁,用临界区来给内存加锁
      

  3.   

    1、对的
    2、不管你SuspendThread了几次  一次ResumeThread就激活了啊 好比你用一把锁锁门 难道锁10次你开10次?
    3、你的线程函数退出 线程就完了 当然你也可以主动terminate掉线程
    4.1、同步是统称  锁是保持同步的一种方法 
    4.2、一个写一个读不会  但有可能读到的是"脏"数据 具体百度google去了解
    4.3、互斥锁就是我访问的时候不允许其他人访问  相当于数据独享操作 
      

  4.   

    在线程函数中return0;之前TerminateThread();就退出了。
      

  5.   

    1、对的
    2、对的。while ( ResumeThread(hThread) > 1 ) {}
     这样就可以保证恢复线程运行;
    3、通知线程终止运行,方法多种,然后等线程内核对象触发(线程终止时其内核对象处于触发状态);
    4、 1)锁是实现同步的机制,但是个模糊的说法,一般关键段(或称临界区)、读写锁、互斥体才称为锁,而同步的机制还有很多;
        2)两个线程对同一内存进行读操作,不需同步,不用担心破坏内存;
        一个线程读另一个线程写从安全上来说也不用加锁,但想每次读取的都是写后的完整数据,就需要加锁,有读有写一般用读写锁;
        两个线程同时写也可以用读写锁,或者关键段,前者效率更高些,后者能够递归调用。
        但当跨进程进行线程同步时,只能用内核对象:互斥体。
        3)是互斥体吧?就是一种用于线程同步的内核对象,使线程独占对资源的访问。它和关键段是一样的,就是只有一个线程可以获取锁,从而被调度(即可以运行)。另外,希望4楼和5楼不要介意,我只是为了真理不得不说:
    4楼说的第2点和3点,以及5楼说的,楼主千万别被误导。
      

  6.   

    1,2问题参考MSDN文档,看看该函数的返回值的含义。
    3. 线程最好是让他自己return返回,在主线程结束之前最好是让所有的子线程先结束。,比如给子线程发消息,设置子线程退出标志,设置退出EVENT事件信号等等。
    4. 同时读写同一个全局变量就需要加锁以保持同步。
    5. 禁止多个线程同时进入受保护的代码“临界区”
      

  7.   


    第2点是错的 看了msdn 确实是计数  根据返回值可以知道调用之前的计数  不过我使用过程中没有出现需要SuspendThread多次这样的用法 所以主观认为:SuspendThread会判断当前状态如果是挂起状态直接返回成功
      

  8.   

    1:YES
    2:是的
    3:程序退出线程会自动结束, 若要保证不出错误, 设置一个变量来控制线程结束, 等待线程结束后才退出.
    threadfunc()
    {
        while(g_bStopthread){...;}
        g_bStopthread = FALSE;
    }
    创建线程时g_bStopthread=FALSE, 退出前
    g_bStopthread = TRUE;
    while(g_bStopthread) {Sleep(100);}
    ....exit....4:
       1)锁用来实现同步
       2)不用锁会破坏, 读写同步要加锁等待.
       3)互斥锁就是这边加了锁,那边就得等这边解锁后才能操作. 尽量用值传递的方式传参. 尽量少用全局变量.
      

  9.   

    上边g_bStopthread状态写错了, 方法大致如此.