According to the OpenACC v1.0 reference, the acc kernels directive surrounds loops to be executed on the accelerator, typically as a sequence of kernel operations. This means that code outside loops does not necessarily have to run in parallel in the accelerator. In your case, it would be better to use the acc parallel directive:
#pragma acc parallel copyin(a[0:n],b[0:n]), copyout(c[0:n])
{
c[0]=11;
#pragma acc loop
for(i=0; i<n; i++) {
if(c[i]==11) c[i]=123;
c[i] = a[i] + b[i];
}
}
The acc loop directive ensures that the iterations of the loop are distributed across the accelerator threads.