android8.1环境下 linux posix线程实现
Posted we1less
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android8.1环境下 linux posix线程实现相关的知识,希望对你有一定的参考价值。
写一个关于线程的消费者生产者的例子这里抛一个链接 是关于如何在jni环境下进行线程操作的https://blog.csdn.net/we1less/article/details/109133251
thread_posix.cpp
//
// Created by godv on 21-5-12.
//
#include <pthread.h>
#include <stdio.h>
#include "godv_log.h"
//队列的头文件
#include "queue"
//sleep的头文件
#include "unistd.h"
//消费者线程
pthread_t buy;
//消费者线程
pthread_t sell;
//线程锁
pthread_mutex_t mutex;
//线程信号
pthread_cond_t cond;
bool tag = true;
//创建队列
std::queue<int> queue;
void *buyCallBack(void *data) {
void *data1 = data;
while (tag) {
//线程锁
pthread_mutex_lock(&mutex);
if (queue.size() > 0) {
queue.pop();
LOGD("消费者消费了一个产品,目前产品总数为:%lu", queue.size());
} else {
LOGD("消费者正在等待。。。");
//线程等待 同时释放线程锁
pthread_cond_wait(&cond, &mutex);
}
//线程解锁
pthread_mutex_unlock(&mutex);
usleep(1000 * 500);
}
pthread_exit(&buy);
}
void *sellCallBack(void *data) {
void *data1 = data;
while (tag) {
//线程锁
pthread_mutex_lock(&mutex);
queue.push(1);
LOGD("生产者生产了一个产品,并通知消费者可以消费了,目前产品总数为:%lu", queue.size());
//发送信号激活等待的线程
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
usleep(500 * 1000);
}
pthread_exit(&sell);
}
int main(void){
printf("thread start \\n");
//初始化线程锁
pthread_mutex_init(&mutex, NULL);
//初始化线程信号
pthread_cond_init(&cond, NULL);
//创建线程 1NULL 线程属性 2NULL 为回调函数的参数
pthread_create(&buy, NULL, buyCallBack, NULL);
pthread_create(&sell, NULL, sellCallBack, NULL);
sleep(10);
tag = false;
printf("thread end \\n");
exit(0);
}
inc/godv_log.h
//
// Created by godv on 21-5-12.
//
#ifndef android_GODV_LOG_H
#define ANDROID_GODV_LOG_H
#include "android/log.h"
#define LOG_TAG "godv"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#endif //ANDROID_GODV_LOG_H
Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := godv_thread
LOCAL_SRC_FILES := thread_posix.cpp
LOCAL_SHARED_LIBRARIES += liblog
LOCAL_C_INCLUDES := $(LOCAL_PATH)/inc
include $(BUILD_EXECUTABLE)
log
generic_x86_64:/data/local # ./godv_thread
thread start
thread end
generic_x86_64:/data/local # logcat -s "godv"
--------- beginning of main
--------- beginning of system
--------- beginning of crash
05-12 23:01:58.877 2347 2349 D godv : 生产者生产了一个产品,并通知消费者可以消费了,目前产品总数为:1
05-12 23:01:58.877 2347 2348 D godv : 消费者消费了一个产品,目前产品总数为:0
05-12 23:01:59.377 2347 2349 D godv : 生产者生产了一个产品,并通知消费者可以消费了,目前产品总数为:1
05-12 23:01:59.377 2347 2348 D godv : 消费者消费了一个产品,目前产品总数为:0
05-12 23:01:59.877 2347 2349 D godv : 生产者生产了一个产品,并通知消费者可以消费了,目前产品总数为:1
05-12 23:01:59.877 2347 2348 D godv : 消费者消费了一个产品,目前产品总数为:0
05-12 23:02:00.378 2347 2349 D godv : 生产者生产了一个产品,并通知消费者可以消费了,目前产品总数为:1
05-12 23:02:00.378 2347 2348 D godv : 消费者消费了一个产品,目前产品总数为:0
05-12 23:02:00.878 2347 2349 D godv : 生产者生产了一个产品,并通知消费者可以消费了,目前产品总数为:1
05-12 23:02:00.878 2347 2348 D godv : 消费者消费了一个产品,目前产品总数为:0
05-12 23:02:01.378 2347 2349 D godv : 生产者生产了一个产品,并通知消费者可以消费了,目前产品总数为:1
05-12 23:02:01.378 2347 2348 D godv : 消费者消费了一个产品,目前产品总数为:0
05-12 23:02:01.879 2347 2348 D godv : 消费者正在等待。。。
05-12 23:02:01.879 2347 2349 D godv : 生产者生产了一个产品,并通知消费者可以消费了,目前产品总数为:1
05-12 23:02:02.379 2347 2349 D godv : 生产者生产了一个产品,并通知消费者可以消费了,目前产品总数为:2
05-12 23:02:02.379 2347 2348 D godv : 消费者消费了一个产品,目前产品总数为:1
05-12 23:02:02.879 2347 2348 D godv : 消费者消费了一个产品,目前产品总数为:0
05-12 23:02:02.879 2347 2349 D godv : 生产者生产了一个产品,并通知消费者可以消费了,目前产品总数为:1
05-12 23:02:03.380 2347 2349 D godv : 生产者生产了一个产品,并通知消费者可以消费了,目前产品总数为:2
05-12 23:02:03.380 2347 2348 D godv : 消费者消费了一个产品,目前产品总数为:1
05-12 23:02:03.880 2347 2348 D godv : 消费者消费了一个产品,目前产品总数为:0
05-12 23:02:03.880 2347 2349 D godv : 生产者生产了一个产品,并通知消费者可以消费了,目前产品总数为:1
05-12 23:02:04.380 2347 2348 D godv : 消费者消费了一个产品,目前产品总数为:0
05-12 23:02:04.380 2347 2349 D godv : 生产者生产了一个产品,并通知消费者可以消费了,目前产品总数为:1
05-12 23:02:04.881 2347 2348 D godv : 消费者消费了一个产品,目前产品总数为:0
05-12 23:02:04.881 2347 2349 D godv : 生产者生产了一个产品,并通知消费者可以消费了,目前产品总数为:1
05-12 23:02:05.381 2347 2349 D godv : 生产者生产了一个产品,并通知消费者可以消费了,目前产品总数为:2
05-12 23:02:05.381 2347 2348 D godv : 消费者消费了一个产品,目前产品总数为:1
05-12 23:02:05.881 2347 2349 D godv : 生产者生产了一个产品,并通知消费者可以消费了,目前产品总数为:2
05-12 23:02:05.881 2347 2348 D godv : 消费者消费了一个产品,目前产品总数为:1
05-12 23:02:06.382 2347 2348 D godv : 消费者消费了一个产品,目前产品总数为:0
05-12 23:02:06.382 2347 2349 D godv : 生产者生产了一个产品,并通知消费者可以消费了,目前产品总数为:1
05-12 23:02:06.882 2347 2348 D godv : 消费者消费了一个产品,目前产品总数为:0
05-12 23:02:06.882 2347 2349 D godv : 生产者生产了一个产品,并通知消费者可以消费了,目前产品总数为:1
05-12 23:02:07.382 2347 2349 D godv : 生产者生产了一个产品,并通知消费者可以消费了,目前产品总数为:2
05-12 23:02:07.382 2347 2348 D godv : 消费者消费了一个产品,目前产品总数为:1
05-12 23:02:07.883 2347 2349 D godv : 生产者生产了一个产品,并通知消费者可以消费了,目前产品总数为:2
05-12 23:02:07.883 2347 2348 D godv : 消费者消费了一个产品,目前产品总数为:1
05-12 23:02:08.383 2347 2348 D godv : 消费者消费了一个产品,目前产品总数为:0
05-12 23:02:08.383 2347 2349 D godv : 生产者生产了一个产品,并通知消费者可以消费了,目前产品总数为:1
^Z[1] + Stopped \\logcat -s "godv"
以上是关于android8.1环境下 linux posix线程实现的主要内容,如果未能解决你的问题,请参考以下文章