实验步骤
发现双线程运行过程中会出现keys missing错误,并且运行时间也远大于单线程的运行时间。出现此问题的原因是多线程同时访问同一块内存并进行insert操作时未加锁,会发生冲突,因而会导致丢失keys。
在原有ph.c代码的基础上做如下改动:
(1)声明锁变量数组:
(2)在main()函数中初始化锁变量数组:
(3)当进行insert操作是加锁保护,修改put()函数如下:
再次编译ph.c,并分别以单线程和双线程运行,结果如下:
发现双线程与单线程速度相仿,且没有出现keys missing,说明运行结果正确。