Skip to content
Snippets Groups Projects
Commit 8f69bf7d authored by Alexandr Mruchok's avatar Alexandr Mruchok
Browse files

[+] Added pthread_barrier_init for Android

parent a19aa8c7
No related branches found
No related tags found
2 merge requests!28Feature 2648,!25Feature 2648
......@@ -104,6 +104,11 @@ if(DARWIN)
target_link_libraries(${PROJECT_NAME} dap_core_darwin)
endif()
if(ANDROID)
add_subdirectory(src/android)
target_link_libraries(${PROJECT_NAME} dap_core_android)
endif()
if(BUILD_DAP_TESTS)
enable_testing()
add_subdirectory(test)
......
cmake_minimum_required(VERSION 3.0)
project (dap_core_android C)
file(GLOB CORE_ANDROID_SRCS *.c)
file(GLOB CORE_ANDROID_HEADERS *.h)
add_library(${PROJECT_NAME} STATIC ${CORE_ANDROID_SRCS} ${CORE_ANDROID_HEADERS})
#target_link_libraries(${PROJECT_NAME} dap_core pthread)
target_include_directories(${PROJECT_NAME} INTERFACE .)
#if __ANDROID_API__ < __ANDROID_API_N__
#include "pthread_barrier.h"
#include <errno.h>
int pthread_barrier_init(pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned int count)
{
if(count == 0)
{
errno = EINVAL;
return -1;
}
if(pthread_mutex_init(&barrier->mutex, 0) < 0)
{
return -2;
}
if(pthread_cond_init(&barrier->cond, 0) < 0)
{
pthread_mutex_destroy(&barrier->mutex);
return -3;
}
barrier->tripCount = count;
barrier->count = 0;
return 0;
}
int pthread_barrier_destroy(pthread_barrier_t *barrier)
{
pthread_cond_destroy(&barrier->cond);
pthread_mutex_destroy(&barrier->mutex);
return 0;
}
int pthread_barrier_wait(pthread_barrier_t *barrier)
{
pthread_mutex_lock(&barrier->mutex);
++(barrier->count);
if(barrier->count >= barrier->tripCount)
{
barrier->count = 0;
pthread_cond_broadcast(&barrier->cond);
pthread_mutex_unlock(&barrier->mutex);
return 1;
}
else
{
pthread_cond_wait(&barrier->cond, &(barrier->mutex));
pthread_mutex_unlock(&barrier->mutex);
return 0;
}
}
#endif
#ifndef PTHREAD_BARRIER_H
#define PTHREAD_BARRIER_H
#include <pthread.h>
#if __ANDROID_API__ < __ANDROID_API_N__
typedef int pthread_barrierattr_t;
typedef struct
{
pthread_mutex_t mutex;
pthread_cond_t cond;
int count;
int tripCount;
} pthread_barrier_t;
int pthread_barrier_init(pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned int count);
int pthread_barrier_destroy(pthread_barrier_t *barrier);
int pthread_barrier_wait(pthread_barrier_t *barrier);
#endif // PTHREAD_BARRIER_H
#endif // PTHREAD_BARRIER_H
......@@ -13,7 +13,11 @@ endif()
add_library(${PROJECT_NAME} STATIC ${CORE_UNIX_SRCS} ${CORE_UNIX_HEADERS}
${CORE_LINUX_SRCS} ${CORE_LINUX_HEADERS})
target_link_libraries(${PROJECT_NAME} dap_core pthread)
target_link_libraries(${PROJECT_NAME} dap_core)
if (NOT ANDROID)
target_link_libraries(${PROJECT_NAME} pthread)
endif()
target_include_directories(dap_core_unix INTERFACE .)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment