选择题 3.  在竞态条件(Race condition)的情况下,两个线程执行如下代码段,其中count为共享变量,线程1执行代码段A,线程2指向代码段B,那么变量count的值可能为______。
    int count=10;
    代码段A:
    Thread_1()
    {
    //do something
    count++;
    }
    代码段B:
    Thread_2()
    {
    //do something
    count--;
    }
【正确答案】 A、B、C
【答案解析】 如果两个或两个以上的线程同时访问相同的对象,或者访问不同步的共享状态,就会出现竞态条件。竞态条件是一个在设备或者系统试图同时执行两个操作的时候出现的不希望的状况,但是由于设备和系统的自然特性,为了正确地执行,操作必须按照合适顺序进行。
   本题中,线程Thread_1读取count(10),进行递增操作,还未写回新值1(11)时,线程Thread_2读取count旧值(10),进行递减操作得到新值2(9),当写回时,若新值1覆盖新值2,则得到count=11,若新值2覆盖新值1,则得到count=9。若count++和count--顺序执行,则得到正常值10。
   需要注意的是,竞态条件的出错概率非常小,只有非常快速或者非常运气不好时才会出现,在几百万次运行中也很少遇到一次,所以,很难调试出来。
   所以,本题的答案为ABC。