用信号量进行线程同步:

#include <stdio.h>
#include 
<unistd.h>
#include 
<string.h>
#include 
<pthread.h>
#include 
<stdlib.h>
#include 
<semaphore.h>

void *thread_function(void *arg);
sem_t bin_sem;
#define WORK_SIZE 1024
char work_area(WORK_SIZE);

int main(){
    
int res;
    pthread_t a_thread;
    res 
= sem_int(&bin_sem,0,0);
    
if(res !=0 ){
       perror(
"Semaphore initialization failed");
       exit(EXIT_FAILURE);
    }

    res 
= pthread_create(&a_thread,NULL,thread_function,NULL);
    
if(res != 0){
       perror(
"Thread creation failed");
       exit(EXIT_FAILURE);
    }

    printf(
"Input some text.Enter 'end' to finish\n");
    
while(strncmp("end",work_area,3)!=0){
       fgets(work_area,WORK_SIZE,stdin);
       sem_post(
&bin_sem);
    }

    printf(
"\nWaiting for thread to finish\n");
    res
=pthread_join(a_thread,&thread_result);
    
if(res != 0){
       perror(
"Thread join failed");
       exit(EXIT_SUCCESS);
    }

    printf(
"Thread joined\n");
    sem_destroy(
&bin_sem);
    exit(EXIT_SUCCESS);
}


void *thread_function(void *arg){
   sem_wait(
&bin_sem);
   
while("end",work_area, 3){
      printf(
"You input %d characters\n" ,strlen(work_area)-1);
   }

   pthread_exit(NULL);
}
   

 

用互斥量进行同步:

#include <pthread.h>

int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr );

int pthread_mutex_lock(pthread_mutex_t *mutex);//试图对互斥量加锁,如果它已经被锁住,这个调用将被阻塞直到锁被释放为之。

int pthread_mutex_unlock(pthread_mutex_t *mutex);

int pthread_mutex_destroy(pthread_mutex_t *mutex);

 

线程的属性:

 

取消一个线程: