Multi Producer - Single Consumer
Tabs Vs Spaces

Your code formatting isn't consistent.  Looking at your code, this appears to be because you're using both tabs and spaces for white space.  Which is why you end up with code that looks like this (notice the printf doesn't line up with the exit):

if (s != 0) {
        printf("pthread_barrier_init failied");
    exit(-1);
}   


Different people prefer one or the other, but don't mix and match pick one and stick with it.

Termination

It's unclear to me how you're expecting your threads to exit.  Both your consumers and your producers go into while(true) loops, which don't have any break conditions in them.  This is inconsistent with your main, which attempts to join with the consumer and producer threads.

Pointer Assignment

My compiler isn't a huge fan of this line:

buf_write = &amp;act_buf[index]


buf_write is char(*buf_write)[20] and you're trying to assign it to char*[50][20].  I think you should probably be doing this:

buf_write = &amp;act_buf[index][0]


Synchronisation

I think overall, the way you've synchronised between the consumer and producers is fairly tidy, although your variable names could be improved to describe what their function is.  mutex is clearly a mutex, but what's it being used for, how is it different from lock?  For the scenario you've built, having the consumer wait until all of the producers have completed seems to work ok, however in the general case, where producers might take different amounts of time it might make more sense for the consumer to handle information from each producer as it is complete.