#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
//https://www.cnblogs.com/chenjx85/p/10574752.html
int rows=0,idx=1,len;
pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
void* my_func(void* args) {
char* s=(char*)args;
while(1){
int now;
pthread_mutex_lock(&mut);//在访问公共资源之前加锁
if(idx>rows){
pthread_mutex_unlock(&mut);
return NULL;
}
now=idx;
idx++;
pthread_mutex_unlock(&mut);//公共资源访问结束后解锁
int j=0,l,r;
//printf("%d",now);
for(int i=0;i<len;i++){
if(j==(now-1)){
l=i;
break;
}
if(s[i]=='\n')j++;
}
for(int i=l;i<len;i++){
if(s[i]=='\n')j++;
if(j==now){
r=i;
break;
}
}
char tmp;
for(int i=0;i<(r-l)/2;i++){
tmp=s[l+i];
s[l+i]=s[r-1-i];
s[r-1-i]=tmp;
}
printf("%d %d\r\n",l,r);
}
return NULL;
}
int parallel_reverse_chars(char* data, int nthreads) {
len=strlen(data);
for(int i=0;i<len;i++){
if(data[i]=='\n')rows++;
}
pthread_t th[1000];
for(int i=0;i<nthreads;i++){
pthread_create(&th[i], NULL, (void*)my_func, data);
}
for(int i=0;i<nthreads;i++){
pthread_join(th[i], NULL);
}
return rows;
}
int main() {
char string[128] = "abc\ndefgh\ni\njklmn\n";
int ret = parallel_reverse_chars(string,4);
printf("%d\r\n",rows);
printf("%s",string);
return 0;
}