diff --git a/Code_With_Threads/fonctions.h b/Code_With_Threads/fonctions.h
new file mode 100644
index 0000000000000000000000000000000000000000..a232aef69e590f44af8fbcfaca71745c3a1a6ab4
--- /dev/null
+++ b/Code_With_Threads/fonctions.h
@@ -0,0 +1,66 @@
+#ifndef fonctions_h
+#define fonctions_h
+
+typedef struct node {
+    int value;
+    struct node *next;
+} node_t;
+
+typedef struct list {
+    node_t *first;
+    node_t *last;
+    int length;
+} list_t;
+
+typedef struct node2 {
+    list_t *diviseurs;
+    struct node2 *next;
+} node_lst;
+
+typedef struct list2 {
+    node_lst *first;
+    node_lst *last;
+    int length;
+} list_lst;
+
+typedef struct buffer1 {
+    list_t *numbers;
+    int in_buffer;
+    sem_t free;
+    sem_t full;
+    pthread_mutex_t mutex;
+    bool can_stop;
+} buffer1;
+
+typedef struct buffer2 {
+    list_lst *prime_numbers;
+    int in_buffer;
+    sem_t free;
+    sem_t full;
+    pthread_mutex_t mutex;
+} buffer2;
+
+void init_list_t(list_t *my_list);
+void init_list_lst(list_lst *my_list);
+void put_node_t(list_t *my_list, int value);
+void put_node_lst(list_lst *my_list, list_t *put_list);
+int get_node_t(list_t *my_list);
+list_t *get_node_lst(list_lst *my_list);
+int get_at_index(list_t *my_list, int index);
+
+//void clear_node_t(node_t *t);
+//void clear_list_t(list_t *my_list);
+//void clear_node_lst(node_lst *n);
+//void clear_list_lst(list_lst *my_list);
+
+void clear_list_t(list_t *my_list);
+void clear_list_lst(list_lst *my_list);
+
+list_t *prime_list(int value);
+
+buffer1 *init_buffer_1(int nthreads);
+buffer2 *init_buffer_2(int nthreads);
+
+int count_lines(char *filename);
+
+#endif //fonctions_h
\ No newline at end of file