解决方案 »

  1.   


    应该不是,如果冲突,不也应该出错么code打印了某个log后,就不再打印了,不知道为啥
      

  2.   

    父线程中:
                    while (testingSSD.IsWatchingITS)
                    {
                        data = null;
                        bytes = new Byte[1024];
                        bytesRec = handler.Receive(bytes);
                        data = Encoding.ASCII.GetString(bytes, 0, bytesRec);
                        if (string.IsNullOrEmpty(data)) { data = ""; }
                        breakflag = false;
                        ParseMessageFromITS(data, out breakflag);
                        if (breakflag) { break; }
                       
                        if (data != "" && testingSSD.TestResult == SSDTestResult.SYNC && !GlobalVariables.BlockSyncWaitFalg)
                        {
                            try
                            {
                                GlobalVariables.BlockSyncWaitFalg = true;
                                BlockSyncClass bsc = new BlockSyncClass();
                                bsc.SetSlave(0, Convert.ToInt16(testingSSD.SLot) - 1);
                                blocksyncthread = new Thread(new ThreadStart(bsc.BlockSyncThreadEnter));
                                blocksyncthread.Name = "BlockSyncThread_" + testingSSD.SLot + "_" + testingSSD.TestBlockName;
                                blocksyncthread.Start();
                                Thread.Sleep(3000);
                                bsc = null;
                                addlog(...);
                            }
                            catch (Exception eeex)
                            {
                                addlog(...);
                            }
                        }
                     }
    子线程:
            private int _slave = 0;
            private int _idx = -1;        public void SetSlave(int _slv, int _id)
            {
                _slave = _slv;
                _idx = _id;
            }        public void BlockSyncThreadEnter()
            {
                try
                {
                    if (...)
                        StartSyncBlockTest();
                    else if (..)
                        StartSyncBlockTest_PCIE();
                }
                catch(Exception e)
                {
                    addlog(...);
                }
            }        private void StartSyncBlockTest_PCIE()
            {
                    while (true)
                    {
                    ............                
                    }
            }大体就是这样的code,具体的就不贴了,太多了。
      

  3.   


    我同时开16个线程,4个一组;每个线程中间根据需要会开子线程,然后中间启动子线程的时候有时会莫名停下来;其他组的线程还是正常测试
    所以测试下来可能是全成功,也可能是3组成功,另一组停在某个地方就不动了,没有error报出
      

  4.   

    如何确认线程的工作状态,是通过打印的日志吗?
    addlog方法是否线程安全?
      

  5.   

    打印日志是用来调试用的,可以看子线程运行到哪里,如果出错的话。
    打印日志都有try处理的。
      

  6.   

    更改线程的优先级,看看每次阻塞的线程是不是优先级最低的那个。如果是的话,说明优先级高的线程一直在占用CPU资源。