本帖最后由 yang2009001 于 2014-10-15 15:47:27 编辑

解决方案 »

  1.   

    我现在不是关心有没有拿到重复的票数,而是这2个线程,拿到了自己的对应票,却没有在拿到票之后打印出票号。票号按理论来讲是要100到1递减,但结果不是这样显示线程执行是不分先后的,就是说
    Fun1Proc在执行tickets--的时候
    Fun2Proc可能在执行cout,
    这时候Fun2Proc全部执行完了,
    Fun1Proc才执行完cout
      

  2.   

    问题来了,93号那张票,既然线程1抢到了,为何不是先输出
    DWORD WINAPI Fun1Proc(LPVOID lpParameter)
    {
        while(TRUE)
        {
            if(tickets>0)
                cout<<"thread1 sell ticket :"<<tickets--<<endl;         /./93号线程执行完tickets-- 准备执行cout<< 输出的时候发送线程切换,去执行线程2了,然后又回来就发生这种现象了
            else
                break;
        }
        return 0;
    }
    DWORD WINAPI Fun2Proc(LPVOID lpParameter)
    {
        while(TRUE)
        {
            if(tickets>0)
                cout<<"thread2 sell ticket :"<<tickets--<<endl;
            else
                break;
        }
        return 0;
    }
    多线程访问共享数据必须加锁