must grow in width to accommodate additional threads as well as in height to accommodate additional threads for the t array or synchronization objects for the s array the overhead of maintaining the arrays may be considerable a more practical implementation might associate a bit or boolean vector with each thread and synchronization object the number of elements of each vector would be at least as large as the number of threads and the vectors could more easily be extended as new threads were created this implementation would essentially split the t and s arrays into individual rows and associate each row with a thread for rows of the t array or a synchronization object for rows of the s array however neither the information contained in the vectors nor its propagation would be affected by this organization of the data structures instead of bit or boolean vectors an embodiment of the invention may maintain vectors of more complex data structures that contain for example other useful information about each thread for detecting actual and potential cross thread stack access all that is necessary is that the data structure contain either explicitly or implicitly enough information to determine whether a first thread is certain to be aware of the termination of a.