pthread_mutex和pthread_cond_t
下面是自己的理解和例子代码
#import <Foundation/Foundation.h>
@interface NSLockTest : NSObject
- (void)forTest;
@end
#import "NSLockTest.h"
#import <pthread.h>
@interface NSLockTest()
@property (nonatomic,strong) NSMutableArray *tickets;
@property (nonatomic,assign) int soldCount;
@end
@implementation NSLockTest
pthread_cond_t condition;
pthread_mutex_t pMutex;
- (void)forTest
{
self.tickets = [NSMutableArray arrayWithCapacity:1];
pthread_cond_init(&condition, NULL);
pthread_mutex_init(&pMutex, NULL);
NSThread *windowOne = [[NSThread alloc]initWithTarget:self selector:@selector(soldTicket) object:nil];
[windowOne start];
NSThread *windowTuiPiao = [[NSThread alloc]initWithTarget:self selector:@selector(tuiPiao) object:nil];
[windowTuiPiao start];
}
-(void)soldTicket
{
// pthread_mutex_lock(&pMutex);
while (self.tickets.count == 0) {
NSLog(@"====没票了,等别人退票");
pthread_cond_wait(&condition, &pMutex);
}
NSLog(@"====买了一张票,%@",[self.tickets objectAtIndex:0]);
[self.tickets removeObjectAtIndex:0];
// pthread_mutex_unlock(&pMutex);
pthread_cond_destroy(&condition);
pthread_mutex_destroy(&pMutex);
}
- (void)tuiPiao
{
sleep(3);
[self.tickets addObject:@"南京-北京A101(退票)"];
NSLog(@"====有人退票了,赶快去买");
pthread_cond_signal(&condition);
// pthread_mutex_unlock(&pMutex);
}
@end
注意
1、在pthread_mutex使用基础上,可参照之前文章
2、pthread_cond_t和NSCondition类似
用法
1、申明,pthread_cond_t condition; pthread_mutex_t pMutex;
2、初始化,pthread_cond_init(&condition, NULL); pthread_mutex_init(&pMutex, NULL);
3、阻塞线程,等待信号pthread_cond_wait(&condition, &pMutex);
4、cpu发送信号,pthread_cond_signal(&condition);,阻塞的线程得到信号继续执行









网友评论