1. A method for determining a vulnerability of multi-threaded program code to soft errors, comprising: by a computing device, performing operations for: analyzing instructions for each of two or more threads in the program code to identify particular instructions from the two or more threads that perform predetermined accesses of one or more architectural structures; while executing instructions from the program code, monitoring the executing to determine when the particular instructions are executed and therefore when corresponding predetermined accesses are performed; determining a time for which the program code is exposed to soft errors based on a timing of the corresponding predetermined accesses by determining an amount of time when data is held in at least one of the one or more architectural structures, the data to be used for performing corresponding predetermined accesses for at least one of the particular instructions, the determining the amount of time comprising, for each of the one or more architectural structures, maintaining a corresponding vulnerability counter, a value in the vulnerability counter set using a time counter and a last-accessed counter, the last accessed counter being updated when corresponding predetermined accesses of the architectural structure occur; and using the time for which the program code is exposed to soft errors to determine the vulnerability of the program code to soft errors.