Volta actually fixes livelocks, not deadlocks. Take a simplified producer/consumer example like this:
Code:
*flag = 1;
if(consumer) {
while(*flag) {} // spinloop
} else { // producer
*flag = 0;
}
On existing GPUs if the producer and consumer are in the same warp, and the consumer (the while loop) executes first, the consumer will simply sit and spin forever. If the producer and consumer are on different warps everything works fine.
For Volta this Just Works, no matter where threads are or what order the program executes in.