Implement a blocking counter with a reader/writer lock
You are really writing C
C++ has its own language specific features to handle multi threading.
Your interface is broken.
The only way to test the value of the counter is via GetCount() but by the time you can use the value the counter may have changed.
 Thread1                      Thread2                    Thread3
 if (b.GetCount() == 0) {     if (b.GetCount() == 0) {   if (b.GetCount() == 0) {
     b.Increment();                b.Increment();             b.Increment();
     // I have the lock.
     Do stuff                      Do stuff                   Do stuff
 }                            }                          }

As you can see your mechanism does not stop all three threads from doing something. The only real use for the counter is to print the count (and even that may not be accurate but at least it wont break anything).