This paper gives a full characterization of the time needed to compute a boolean function on a CREW PRAM with an unlimited number of processors. The characterization is given in terms of a new complexity measure of boolean functions: the 'block sensitivity,' a generalization of the well-known 'critical sensitivity' measure. The block sensitivity is also shown to relate to the boolean decision tree complexity, and the implication is that the decision tree complexity also fully characterizes the CREW PRAM complexity. This solves an open problem of Wegener. The results imply that changes in the instruction set of the processors or in the capacity of the shared memory cells do not change by more than a constant factor the time required by a CREW PRAM to compute any boolean function. Moreover, it is shown that a seemingly weaker version of a CREW PRAM, the CROW PRAM, can compute functions as quickly as a general CREW PRAM. This solves an open problem of Dymond and Ruzzo. Finally, the results have implications regarding the power of randomization in the boolean decision tree model. It is shown that in this model, randomization may achieve only a polynomial speedup over deterministic computation. This was known for Las Vegas randomized computation; it is also proven for one-sided error computation (a quadratic bound) and two-sided error (a cubic bound).