首页 > 代码库 > 多线程同步程序的测试思路

多线程同步程序的测试思路

这里我有一个简单的思路,来源于去年应届生找工作做大量的名企笔试题里他人的技巧。


多线程的测试使用cout是不靠谱的,因为多个线程使用cout很容易产生混乱的输出,而且耗时。


多线程的测试往往需要知道多个线程同时运行的时候对某个共享区域的使用是否正确,为了检验正确性,比较好的测试用例就是:递增的整数序列

递增的整数序列中的每一个整数都对应一个线程的动作,最后我们将这些整数再当成另一个标记数组的下标,下标对应的值就是我们操作的动作执行的次数

只要用于标记的数组每一个元素都是1,即可。


比如:

(1)

//初始化

const int test_item_total = 1000;
int flag[test_item_total]={0};

(2)

//线程执行时的测试动作

//生产者

buffer[put_in.value()] = ++item;

//消费者

 ++flag[buffer[get_out.value()]];

(3)

//最后所有线程退出的时候做检查

void check(int * arr)
{
    
    for (int i=0;i<test_item_total;++i)
    {
        if (flag[i] != 1)
        {
            cout<<"flag["<<i<<"]="<<flag[i]<<endl;
        }
    }
    cout<<"check finished!"<<endl;
}


这种方法制造的测试数据最少,测试方法最简单,测试灵活性也很高,测试环境简单有效。

之前的测试都是使用了制造数据,再插入到数据库中查看,这难免对测试环境要求很高,而且测试环境本身也复杂容易出问题。