我的NDK学习开发笔记(三)
来源:互联网 发布:点云数据英文 编辑:程序博客网 时间:2024/06/06 03:21
android程序开发中经常用到多线程,本篇记录多线程的创建及多线程同步
一、开发中的问题记录
1.先引入必要的文件,即#include <pthread.h>。2.创建线程pthread_create(&threads, NULL, threadStart1, (void*)i);返回值是创建线程结果,如int ret=pthread_create();当ret==0创建成功,其他均是创建失败。1)参数说明:(用于返回的线程地址,线程属性,执行函数,传递的参数)2)线程地址:也就是创建成功得到的线程对象。线程属性:即线程的优先级、等级等,通常设置NULL就可以满足使用。执行函数:即线程创建后要运行的函数,函数必须是指针函数且有一个传参,如void*threadStart2(void*id){}。传递的参数:传递给执行函数的参数。3.让线程休眠,usleep(1);//休眠1毫秒。注:在linux中sleep函数是休眠进程,usleep才是休眠当前线程。同时需要#include <unistd.h>//usleep需要引入。4.线程同步(线程锁),当多个线程使用同一个数据或对象时使用。1)创建线程锁pthread_mutex_t mutex1;2)初始化线程锁pthread_mutex_init(&mutex1,NULL);但实验发现,即使不初始化也能正常使用mutex1线程锁。3)在开始使用数据前获取先线程锁thread_mutex_lock(&mutex1);,如果获取不到锁,线程会在此等待直到获取到锁。4)操作数据后,释放锁pthread_mutex_unlock(&mutex1);如果不释放锁,将会使其他线程不能获取到锁。5)当锁不再需要时,可销毁锁pthread_mutex_destroy(&mutex1);提前或错误的销毁锁,会导致其他线程不能获取到锁。但实验发现,即使不销毁锁,貌似也可以正常运行程序。
二、学习时编写的代码
部分代码:
pthread_mutex_t mutex1;//创建线程锁void *threadStart2(void *id) { pthread_mutex_lock(&mutex1);//获取锁 for (int i = 0; i < 300; i++) { int temp = total; usleep(1);//休眠1毫秒 temp++; total=temp; } pthread_mutex_unlock(&mutex1);//释放锁 LOGI("--线程持运行结束--结果:%d", total); //线程结束 pthread_exit(NULL);}void Java_com_xcc_app4_MyJniThread2_startThread2(JNIEnv * env, jclassjc){total = 0;pthread_t threads;int id=1;/** * 初始化线程锁mutex1, * 但实验发现,即使不初始化也能正常使用mutex1 */pthread_mutex_init(&mutex1,NULL);for(int i = 0;i < 3;i++){int rc = pthread_create(&threads, NULL, threadStart2, (void *)i);if(rc){LOGI("--创建线程%d失败--", i);}else{LOGI("--创建线程%d成功--", i);}}/** * 释放锁, * 实验发现,即使不释放也能正常使用。 * 此处不能销毁锁,否则线程将无法获得到锁 *///pthread_mutex_destroy(&mutex1);}
学习时编写的完整代码,下载地址:
码云:http://git.oschina.net/rookieci/NDKStudy
github:https://github.com/cookieci/NDKStudy
码云:http://git.oschina.net/rookieci/NDKStudy
github:https://github.com/cookieci/NDKStudy
阅读全文
0 0
- 我的NDK学习开发笔记(三)
- 我的NDK学习开发笔记(一)
- 我的NDK学习开发笔记(二)
- 我的NDK学习开发笔记(四)
- 我的NDK学习开发笔记(五)
- NDK开发笔记(三)---JNI的学习
- Android NDK开发学习:我的第一个NDK项目
- 我的 android studio ndk 开发笔记(1)
- android NDK开发学习笔记
- 我的java学习笔记(三)
- 我的python学习笔记(三)
- NDK开发笔记(二)---JNI的学习
- NDK开发笔记(二)---JNI的学习
- android_c++ 高级编程NDK学习笔记三
- Android NDK开发学习(三)
- 我的php学习笔记(十六)php的面向对象开发(三)
- 我的iphone开发学习笔记(三)使用UISlide, UIImageView及动画
- 我的苹果开发学习笔记
- 解决UBUNTU系统连不上WIFI问题
- [LeetCode] 55. Jump Game
- Loadrunner性能指标分析
- FFmpeg的H.264解码器源代码简单分析:概述
- JS面向对象和DOM
- 我的NDK学习开发笔记(三)
- hibernate 配置文件详解
- mysql日期和字符相互转换方法
- 线性表的应用——求解两个多项式相加问题描述(链表求解)
- jquery
- IntelliJ IDEA 设置代码提示或自动补全的快捷键
- C语言的fclose()函数
- Asset图数据库基于关系的查询
- 目标检测与跟踪