美文网首页移动开发码农的世界
iOS锁-pthread_mutex和pthread_cond_

iOS锁-pthread_mutex和pthread_cond_

作者: 口子窖 | 来源:发表于2018-07-13 12:22 被阅读1次

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);,阻塞的线程得到信号继续执行

相关文章

网友评论

    本文标题:iOS锁-pthread_mutex和pthread_cond_

    本文链接:https://www.haomeiwen.com/subject/kryjpftx.html