diff --git a/prak3/.vscode/launch.json b/prak3/.vscode/launch.json
index e40495c38db351f015684020e8a638756617b4cc..ed75008fb1e9d081725d6f07098fe11daf2d898b 100644
--- a/prak3/.vscode/launch.json
+++ b/prak3/.vscode/launch.json
@@ -71,7 +71,7 @@
                 "127.0.0.1",
                 "2525",
                 "1024",
-                "20000",
+                "100000",
                 "random",
             ],
             "stopAtEntry": false,
diff --git a/prak3/src/client.cpp b/prak3/src/client.cpp
index 34e48da8f681f430edd1ccc001d1e6cf51029df8..a68c722300382d26c209414d1ffc344dd141a021 100644
--- a/prak3/src/client.cpp
+++ b/prak3/src/client.cpp
@@ -5,16 +5,20 @@
 #include <vector>
 #include <cstdlib>
 #include <ctime>
+#include <chrono>
+#include <thread>
+#include <mutex>
 
 #define HEADER_SIZE 1
 
 pid_t pid = getpid();
+std::vector<double> latencies;
+std::mutex latencies_mutex;
 
 std::string generateRandomKey() {
     return "key" + std::to_string(rand() % 10000);
 }
 
-
 std::string generateRandomValue() {
     return "value" + std::to_string(rand() % 10000);
 }
@@ -115,6 +119,21 @@ std::vector<std::pair<char*, int>> generateRequests(int requestCount, std::strin
     return requests;
 }
 
+void calculate_average_latency() {
+    while (true) {
+        std::this_thread::sleep_for(std::chrono::seconds(1));
+        std::lock_guard<std::mutex> lock(latencies_mutex);
+        if (!latencies.empty()) {
+            double sum = 0;
+            for (double latency : latencies) {
+                sum += latency;
+            }
+            double average_latency = sum / latencies.size();
+            std::cout << "Average latency: " << average_latency << " ms" << std::endl;
+            //latencies.clear();
+        }
+    }
+}
 
 int main(int argc, char* argv[]) {
     if (argc != 6) {
@@ -158,26 +177,33 @@ int main(int argc, char* argv[]) {
         return EXIT_FAILURE;
     }
 
+    // Start the latency calculation thread
+    std::thread latency_thread(calculate_average_latency);
+    latency_thread.detach();
+
     for (const auto& message : requests) {
+        auto start = std::chrono::high_resolution_clock::now();
+
         send(sock, message.first, message.second, 0);
-        std::cout << "Sent: " << message.first << std::endl;
+        //std::cout << "Sent: " << message.first << std::endl;
 
         ssize_t bytes_received = read(sock, buffer, bufferSize);
         if (bytes_received > 0) {
-            std::cout << "Server Response: " << buffer << std::endl;
+           // std::cout << "Server Response: " << buffer << std::endl;
         }
+
+        auto end = std::chrono::high_resolution_clock::now();
+        std::chrono::duration<double, std::milli> latency = end - start;
+
+        {
+            std::lock_guard<std::mutex> lock(latencies_mutex);
+            latencies.push_back(latency.count());
+        }
+
         memset(buffer, 0, bufferSize);
     }
 
     std::cout << "Closing connection..." << std::endl;
     close(sock);
     return 0;
-}
-
-
-
-
-
-
-
-
+}
\ No newline at end of file
diff --git a/prak3/src/server.cpp b/prak3/src/server.cpp
index d1711d711ae3dd918f2a0bcf84b9b38850d23119..87388be15ff0edc2a88e143d8bad3b06d8488736 100644
--- a/prak3/src/server.cpp
+++ b/prak3/src/server.cpp
@@ -71,7 +71,7 @@ struct Request {
     free(input);
     return req;
 }
-
+// we assume that this function is slow
 std::string processRequest_slow(const std::string& request) {
 
     std::string response;   
@@ -105,10 +105,10 @@ std::string processRequest_slow(const std::string& request) {
     free(parsedRequest);
     return response;
 }
+//=============================================
 
-// we assume that this function is fast
 // gelichzeitig lesen aber nur einmal schreiben
-std::string processRequest_fast(const std::string& request) {
+std::string processRequest_unique_mutex(const std::string& request) {
     std::string response;
 
     size_t first = request.find(",");
@@ -158,9 +158,6 @@ std::string processRequest_fast(const std::string& request) {
 
     return response;
 }
-//=============================================
-
-
 // mehrer Thread Lesen gleichzeitig aber ein Thread schreibt.
 std::string processRequest_shared_mtx(const std::string& request) {
     std::string response;
@@ -217,7 +214,6 @@ std::string processRequest_shared_mtx(const std::string& request) {
     return response;
 }
 
-
 void handle_client(int client_socket) {
     
     std::string response;