I must disagree with Jim on one point: It is absolutely necessary to initialize the outer variable "a" before the parallel region. The reason is actually given in Jim's post above. The private copies of "a" (which are automatically initialized to zero) will all be added to the outer variable "a" at the end of the parallel region. If the outer variable "a" is uninitialized, the result value of "a" will be undefined.
A program with slightly better style would be the following:
#pragma omp parallel for private (i) reduction(+:a)
for(i = 0; i < 900000000; i++)