用信号量进行线程同步:
#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 <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);
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);
线程的属性:
取消一个线程: