Response to DukeNukem:
1. You are right. Usually, the number of steps would vary from one thread to another. We can do a similar analysis in terms of the total number of steps in the entire program (summed over all threads). If s is the total number of steps, n is the number of threads, and c is the preemption-bound, then the total number of executions could be as large as n^s and the number of executions with at most c preemptions is bounded by (s^c)*(n+c)!.
2. There are many options for choosing the control locations for introducing a preemption. By default, CHESS introduces preemptions at calls to threading and synchronization APIs. But, a user could instruct the .NET version of CHESS to introduce preemptions at accesses to volatile variables. Also, you could instrument your code with a callback to CHESS to indicate that CHESS should put a preemption point there. We are planning to provide more options in the future, including the ability to automatically put a preemption at a variable access in a thread when that access is found to race with a conflicting access in another thread.
3. I am not sure I understand your final question. A thread usually makes a number of steps. A step in a thread is the execution of code from one context-switch point to the next one. As explained above, there is flexibility in choosing the locations where CHESS introduces context switches.
Thanks for producing this video, it solidified a lot of unknowns for me about CHESS. There is one thing I'm still curious about, though -- in what contexts can CHESS be run? Based on the video, it sounds as if CHESS can only be used with defined unit tests -- is this correct? I would like to be able to use CHESS on a running program, but I'm guessing this is not possible since it would not allow CHESS to "re-run" the program with different pre-emption scenarios. Is this true?
App Verifier lets you attach it to any EXE even a Windows service (daemon). From what I see, CHESS is not there yet. Right?If so, are there plans to take it in that direction?